我有这样的primefaces代码。 选择下拉菜单后,如果值为' M',我想呈现评论textarea。
它工作正常并显示textarea,但在选择' F'时,即使renderComments值为false,它也不会隐藏textarea。
我认为由于<更新没有正确发生。 p:列>标签。 如何解决这个问题,请
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)
,则不确定有什么问题答案 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>