3

假设我有一个带有名为“Success”的布尔变量的 bean。默认情况下,此值为 false。

即如果“成功”为真,我会渲染一个按钮。如果“成功”为假,我会渲染一个 outputText。“成功”的值由用户在 inputText 字段上输入的内容决定。如果它与 6 位数字不同,则“成功”为假。

这可能吗?

4

1 回答 1

3

是的,这是可能的。您只需要确保在输入字段中键入会导致 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当回发未导致组件上的转换/验证错误时才返回。操作方法不应该以任何方式执行转换/验证。

于 2013-08-20T20:05:49.350 回答