<h:inputText id="email_id" value="#{CreateUserManager.email}"
styleClass="#{CreateUserManager.emailPrimariaValid ? '' : 'inputErrorClass'}">
<f:validator validatorId="EmailValidator" />
<a4j:support event="onblur" reRender="email_id, messages" oncomplete="setAnchor();"
status="status4divCoverAll" ajaxSingle="true" />
</h:inputText>
这是托管会话bean:
public class CreateUserManager {
...
protected boolean emailPrimariaValid;
public CreateUserManager() {
...
this.emailPrimariaValid = true;
}
public boolean isEmailPrimariaValid() {
FacesContext context = FacesContext.getCurrentInstance();
UIInput input = (UIInput)context.getViewRoot().findComponent(":createUser:email_id");
return input.isValid();
}
public void setEmailPrimariaValid(boolean emailPrimariaValid) {
this.emailPrimariaValid = emailPrimariaValid;
}
}
请记住,如果我来自另一个页面(url),我会从会话中删除此bean,因此bean会再次执行构造函数。
问题:我写了一个无效的电子邮件,它正确地将类设置为inputErrorClass,但是如果我转到另一个页面(所以输入组件仍然无效)然后回到第一个,该类仍然是inputErrorClass
答案 0 :(得分:0)
你是否有机会使用Seam?当出现错误时,它有一些很好的功能来设置输入元素的样式。
在Seam 2中,您可以使用<s:decorate>
代码:http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/controls.html#d0e28688
在Seam 3中,您可以使用UIInputContainer和复合组件:http://jerryorr.blogspot.com/2011/10/replacement-for-sdecorate-in-seam-3.html
如果您没有使用Seam ......那么,您可以查看Seam源代码,看看他们做了什么!
答案 1 :(得分:0)