Primefaces ajax update不适用于<p:column>中的字段

时间:2017-11-07 13:00:52

标签: java html primefaces

我有这样的primefaces代码。 选择下拉菜单后,如果值为&#39; M&#39;,我想呈现评论textarea。

它工作正常并显示textarea,但在选择&#39; F&#39;时,即使renderComments值为false,它也不会隐藏textarea。

我认为由于&lt;更新没有正确发生。 p:列&gt;标签。 如何解决这个问题,请

HTML

        <p:panelGrid>

            <p:row>
                <p:column style="width:15%">
                    <p:selectOneMenu id="gender" value="#{myBean.model.gender}">
                        <f:selectItem itemValue="M" itemLabel="Male" />
                        <f:selectItem itemValue="F" itemLabel="Female" />
                        <p:ajax event="change" listener="#{myBean.genderListener}" process="@this" update="commentsCol comments" />
                    </p:selectOneMenu>
                </p:column>

                <p:column id="commentsCol" style="width:50%">
                    <p:inputTextarea id="comments" cols="100" rows="2" value="#{myBean.model.comments}" rendered="#{myBean.renderComments}" />
                </p:column>
            </p:row>


        </p:panelGrid>

/**
 * Event for gender.
 */
public void genderListener() {

    if ("M".equalsIgnoreCase(model.getGender())) {
        renderComments = true;
    }
    else {
        renderComments = false;
    }
}           

更新

如果我使用update =&#34; @ form&#34;有用。然而,它更新了我不期望的整个表格。如果我只指定ids(commentsCol comments)

,则不确定有什么问题

3 个答案:

答案 0 :(得分:1)

我通过在p:panelGrid上添加ID并更新而不是列来解决了这个问题。

    <p:panelGrid id="foo">

        <p:row>
            <p:column style="width:15%">
                <p:selectOneMenu id="gender" value="#{myBean.model.gender}">
                    <f:selectItem itemValue="M" itemLabel="Male" />
                    <f:selectItem itemValue="F" itemLabel="Female" />
                    <p:ajax event="change" listener="#{myBean.genderListener}" process="@this" update="foo" />
                </p:selectOneMenu>
            </p:column>

            <p:column id="commentsCol" style="width:50%">
                <p:inputTextarea id="comments" cols="100" rows="2" value="#{myBean.model.comments}" rendered="#{myBean.renderComments}" />
            </p:column>
        </p:row>


    </p:panelGrid>

答案 1 :(得分:0)

尝试更新&#34;评论&#34;而不是&#34; commentsCol&#34;

答案 2 :(得分:0)

我设法通过包装&lt;来解决这个问题。 h:panelGroup&gt;围绕元素并单独使用panelGroup id进行更新。

等效的完整代码就像这样

    <p:panelGrid>
        <p:row>
            <p:column style="width:15%">
                <p:selectOneMenu id="gender" value="#{myBean.model.gender}">
                    <f:selectItem itemValue="M" itemLabel="Male" />
                    <f:selectItem itemValue="F" itemLabel="Female" />
                    <p:ajax event="change" listener="#{myBean.genderListener}" process="@this" update="commentsPanel" />
                </p:selectOneMenu>
            </p:column>

            <p:column style="width:50%">
                <h:panelGroup id="commentsPanel">               
                    <p:inputTextarea id="comments" cols="100" rows="2" value="#{myBean.model.comments}" rendered="#{myBean.renderComments}" />
                </h:panelGroup>
            </p:column>
        </p:row>

    </p:panelGrid>