假设我有一个带有名为“Success”的布尔变量的 bean。默认情况下,此值为 false。
即如果“成功”为真,我会渲染一个按钮。如果“成功”为假,我会渲染一个 outputText。“成功”的值由用户在 inputText 字段上输入的内容决定。如果它与 6 位数字不同,则“成功”为假。
这可能吗?
是的,这是可能的。您只需要确保在输入字段中键入会导致 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
当回发未导致组件上的转换/验证错误时才返回。操作方法不应该以任何方式执行转换/验证。