假设我有一个带有名为“Success”的 bool 变量的 bean。默认情况下,此值为 false。
即如果“成功”为真,我将呈现一个按钮。如果“成功”为假,我将呈现一个 outputText。 “Success”的值由用户在 inputText 字段上输入的内容决定。如果它与 6 位数字不同,则“成功”为假。
这可能吗?
最佳答案
是的,这是可能的。您只需要确保在输入字段中键入会导致 ajax 提交到服务器端,以便 JSF 可以执行其验证和呈现工作。您可以使用 <f:ajax event="keyup">
为了那个原因。然后,您可以将输入绑定(bind)到 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
bool 值,因为在这种特殊情况下这是不必要的。呈现所需的信息已经在 EL 范围和 JSF 组件状态中可用。在这里, FacesContext#isPostback()
只返回 true
如果执行了表单提交(ajax 提交也算作回传)。 UIInput#isValid()
只返回 true
如果回发没有导致组件发生转换/验证错误。操作方法不应以任何方式执行转换/验证。
关于jsf - 基于bean属性动态渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343642/