场景是这样的:
我有2个文本框,例如txtbox1和txtbox2。当用户在txtbox1上键入内容然后按tab时,txtbox1失去焦点,而txtbox2获得焦点。我想在失去焦点时检查txtbox1的值。如果txtbox1值无效,则需要呈现<h:outputText value="Invalid field" rendered=#{bean.errorFlag}/>
我在txtbox1上使用了<p:ajax event="blur" />
。
我的问题是,即使将errorFlag的值设置为true,也不会呈现outputText。我还在ajax上使用update来更新outputText,但它不会呈现它。
最佳答案
您需要在update
属性中指定待更新元素的客户端ID。
<h:inputText id="input1" value="#{bean.input1}">
<p:ajax event="blur" update="input1Message" />
</h:inputText>
<h:panelGroup id="input1Message">
<h:outputText value="Invalid field!" rendered="#{bean.input1Error}" />
</h:panelGroup>
但是...您基本上是在重新发明JSF验证,而没有利用JSF内置的验证API。我强烈建议改为实施
Validator
。@FacesValidator("input1Validator")
public class Input1Validator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (isInvalid(value)) {
throw new ValidatorException(new FacesMessage("Invalid field!"));
}
}
}
并如下使用
<h:inputText id="input1" value="#{bean.input1}">
<p:ajax event="blur" update="input1Message" />
</h:inputText>
<h:message id="input1Message" for="input1" />
这使您的托管bean免于验证和布尔属性混乱。