我有一个这样的素数代码。选择下拉列表后,如果值为"M",则我想呈现注释文本区域。
它工作正常并显示文本区域,但在选择"F"时,即使 renderComments 值为 false,它也不会隐藏文本区域。
我认为由于 <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="@form"它可以工作。但是,它更新了我不希望的整个表单。不确定如果我只指定 ids (commentsCol comments)
我通过在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>
我设法通过在元素周围包裹一个 <h:panelGroup> 并单独使用 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>
尝试更新"注释"而不是"注释Col"