【发布时间】:2010-11-12 13:29:34
【问题描述】:
我使用接缝 2.2.0.GA。 我的密码/确认字段有 redisplay="false" 所以当前密码不在 html 中。 validateEquality 在确认字段中。
我想要以下行为:当我创建一个新实体时,密码/确认字段都应该是必需的。当我编辑一个实体时,这两个字段都不应该是必需的,但无论如何都应该检查相等性。为此,我有 h:inputSecret required="#{required}" 并计算参数“required”。
有两个问题:
1) s:validateEquality 也有属性“required”,但它看起来有问题:如果我硬编码 true 或 false,它会按预期工作,但如果我使用 required="#{required}" 并且在对话过程中这个参数改变了,验证器仍然表现得好像参数没有改变一样。
2) s:validateEquality required="false" 如果确认字段为空,则不检查相等性。
#{sandboxController.now}
<ui:param name="label" value="password"/>
<ui:param name="labelConfirm" value="confirm password"/>
<ui:param name="message" value="not the same"/>
<ui:param name="id" value="bbb"/>
<ui:param name="redisplay" value="#{sandboxBean.redisplay}"/>
<ui:param name="required" value="#{sandboxBean.required}"/>
<ui:param name="value" value="#{sandboxBean.password}" />
<a4j:form id="personalForm">
<a4j:region>
required: <h:selectBooleanCheckbox value="#{required}">
<a4j:support event="onclick" reRender="passwordpanel" />
</h:selectBooleanCheckbox><br/>
redisplay: <h:selectBooleanCheckbox value="#{redisplay}">
<a4j:support event="onclick" reRender="passwordpanel" />
</h:selectBooleanCheckbox><br/>
</a4j:region>
<a4j:outputPanel id="passwordpanel">
password: #{value}<br/>
<s:decorate styleClass="fieldForm #{formClass}">
<div class="fieldLabel #{labelClass}">
<s:label styleClass="#{invalid?'error':''}" >
#{label}
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
</div>
<div class="fieldInput">
<s:validateAll>
<h:inputSecret id="#{id}" value="#{value}" required="#{required}" redisplay="#{redisplay}">
</h:inputSecret>
</s:validateAll>
<s:message styleClass="error"/>
</div>
</s:decorate>
<s:decorate styleClass="fieldForm #{formClass}">
<div class="fieldLabel #{labelClass}">
<s:label styleClass="#{invalid?'error':''}" >
#{labelConfirm}
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>
</div>
<div class="fieldInput">
<s:validateAll>
<h:inputSecret value="#{value}" required="#{required}" redisplay="#{redisplay}">
<s:validateEquality for="#{id}" required="#{required}" message="#{message}"/>
</h:inputSecret>
</s:validateAll>
<s:message styleClass="error"/>
</div>
</s:decorate>
</a4j:outputPanel>
<a4j:commandLink value="submit" action="#{sandboxController.getNow}" reRender="personalForm" /><br/>
</a4j:form>
SandboxBean.java:
package org.foo.model;
import java.io.Serializable;
public class SandboxBean implements Serializable {
private static final long serialVersionUID = 1L;
private String password = "abcde";
private boolean required=false;
private boolean redisplay=false;
public void setRequired(boolean required) { this.required = required; }
public boolean isRequired() { return required; }
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
public void setRedisplay(boolean redisplay) { this.redisplay = redisplay; }
public boolean isRedisplay() { return redisplay; }
}
沙盒控制器.java:
package org.foo.logic.model;
import java.io.Serializable;
import java.util.Date;
import org.foo.model.SandboxBean;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.Factory;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Out;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.log.Log;
@Name("sandboxController")
@Scope(ScopeType.CONVERSATION)
public class SandboxController implements Serializable{
private static final long serialVersionUID = 1L;
@Logger Log log;
@Out(required = false)
SandboxBean sandboxBean;
@Begin(join=true)
@Factory("sandboxBean")
public void initSandBoxBean(){
sandboxBean = new SandboxBean();
}
public Date getNow() {
return new Date();
}
}
【问题讨论】:
标签: seam