假设我有一个带有名为“Success”的布尔变量的bean。默认情况下,此值为false。
即。如果“成功”为真,我会渲染一个按钮。如果“Success”为false,则呈现outputText。 “成功”的值由用户在inputText字段上输入的内容确定。如果它与6位数字有任何不同,则“成功”为假。
这可能吗?
答案 0 :(得分:2)
是的,这是可能的。您只需要确保在输入字段中输入会导致向服务器端提交ajax,以便JSF可以执行其验证和呈现作业。您可以使用<f:ajax event="keyup">
。然后,您可以将输入绑定到Integer
属性,以将其转换/验证为有效数字。然后,您可以使用<f:validateLongRange>
来验证号码范围。
这是一个启动示例:
<h:inputText binding="#{input}" value="#{bean.number}" maxlength="6">
<f:validateLongRange minimum="100000" maximum="999999" />
<f:ajax event="keyup" render="buttonOrText" />
</h:inputText>
<h:panelGroup id="buttonOrText">
<h:commandButton value="button" rendered="#{facesContext.postback and input.valid}" />
<h:outputText value="text" rendered="#{not (facesContext.postback and input.valid)}" />
</h:panelGroup>
请注意,我没有使用任何success
布尔值,因为在这种特殊情况下,这是不必要的。渲染所需的信息已在EL范围和JSF组件状态中可用。如果执行表单提交,FacesContext#isPostback()
仅返回true
(ajax提交也计为回发)。如果回发未在组件上导致转换/验证错误,则UIInput#isValid()
仅返回true
。行动方法不应以任何方式执行转换/验证。