【问题标题】:Render a form content on Ajax event在 Ajax 事件上呈现表单内容
【发布时间】:2012-04-28 15:45:13
【问题描述】:

您如何解决这个常见问题?假设您需要根据一些 Ajax 事件(但不是整个表单)呈现几个表单元素,并且您不想破坏表单布局。 这是示例代码

<h:form>
    <h:panelGrid columns="2">
        text1
        <h:inputText value="asasd" />
        text2
        <h:inputText value="asdasd" />
        <p:selectBooleanCheckbox value="#{bean.myBoolean}">
            <p:ajax update="someId" listener="{bean.changeValueOfMyBoolean"} />
        </p:selectBooleanCheckbox>
        <h:outputText value="asdas"rendered="#{bean.myBoolean}" />
        <h:inputText value="bean value" rendered="#{bean.myBoolean"} />
        ...few more some elements

所以我只看到两个选项,将它们放在 &lt;h:panelGroup&gt; 中,给它们一个 id 并在里面创建另一个 &lt;h:panelGrid&gt; (这会破坏表单布局,因为新渲染的元素会有不同的缩进)或给每个元素它是自己的具有不同 ID 的 paneGroup,然后在 &lt;p:ajax&gt;使用类似 update=id1, id2, ... 的东西,但在我看来这也不是一个好的解决方案。

那么你的方法是什么,有更好的方法吗?

【问题讨论】:

    标签: forms jsf layout jsf-2 primefaces


    【解决方案1】:

    您要么在更新中提供所有要更新的 id,要么

    你可以给所有有共同点的相关组件id,比如

    inputText1、inputText2、inputText3 等

    然后在您的托管 bean 中有一个变量,它将返回所有这些元素的 id。

    在 ajax 事件中,设置值(您可以使用正则表达式来获取视图中的所有 id)。

    但我认为这是迂回的方式,因为这需要访问服务器,而不是我会将 id 放入更新中。

    【讨论】:

    • 第一种方法是我目前的方法,但我不希望每个元素都被&lt;h:panelGroup&gt; 包围(因为您无法更新未呈现的元素)。第二种方法似乎合理,但必须有一个更清洁的解决方案:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    相关资源
    最近更新 更多