基于bean属性动态渲染组件

时间:2013-08-20 19:38:36

标签: jsf jsf-2

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

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

这可能吗?

1 个答案:

答案 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。行动方法不应以任何方式执行转换/验证。