jsf - 基于bean属性动态渲染组件

标签 jsf jsf-2

假设我有一个带有名为“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/

相关文章:

JSF PrimeFaces 添加仅在提交主表单时才需要的多个空输入

java - JSF 导航参数依赖性

java - 拖放到输出文本上

jsf-2 - 如何使用 JSF 生成网站图标 <link>?

jsf-2 - JSF Mojarra 中的文档类型

jsf - 将操作监听器方法作为标记文件属性传递

java - 混合 jsp 和 jsf

java - 在 Myfaces 中找不到 getFlash() 方法

javascript - 调用 h :commandButton submit 后关闭模态面板

jsf-2 - 在复合组件中获取正确的父 ID