我有一个与页面相关联的扣紧bean,我想根据验证是失败还是成功来更改它的值。
@ManagedBean(name = "testBean")
@ViewScoped()
public class TestBean implements Serializable {
String value="";
int number;
/*getters-setters*/
}
检查数字是否为正的验证器
@FacesValidator("Validator")
public class NumValidator implements Validator{
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
int num=(Integer)value;
if(num<0){
FacesMessage msg =
new FacesMessage(The number is negative");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
和一个xhtml页面:
<h:form>
<h:inputText id="number" value="#{testBean.number}" required="true"
requiredMessage="Is">
<f:validator validatorId="Validator" />
<f:ajax event="blur" render="msg" />
</h:inputText>
<h:message id="msg" for="number"/>
</h:form>
并且我希望bean中的String为value="negative"或value="positive",无论情况如何。如何做到这一点?
您的具体功能需求似乎可以归结为:
我如何改变
<h:inputText>
的样式类时,它有一个验证错误?
在这种情况下,只需检查EL中的UIInput#isValid()
。当前的UI组件仅通过隐式EL对象#{component}
可用。
<h:inputText ... styleClass="#{component.valid ? 'positive' : 'negative'}">
<f:ajax ... render="@this msg" />
</h:inputText>
请注意,我将@this
添加到render
中,否则组件本身不会更新。
你不应该用特定于视图的属性(比如CSS类)污染模型。你应该尽量把它们放在视图侧。这将以更"自然"的解决方案告终。