【发布时间】:2012-01-25 15:00:22
【问题描述】:
编辑:我有这个 sn-p 代码:
<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 .
【问题讨论】:
-
这真的是一个“会话 bean”,就像在 EJB 中一样?还是您的意思是“会话范围的托管 bean”?看不到注释,很难分辨。
-
它是一个会话范围的托管bean,jsf版本是1.2
-
你做了什么调试?当您返回页面时,isEmailPrimariaValid() 是否返回 true?
-
当我返回该方法返回 false 时,它似乎以某种方式存储了组件的无效状态,尽管我从会话中删除了托管 bean!