[英]rendered not working in Primefaces5+JSF2
这是我的XHTML代码
<p:selectOneRadio id="selectone"
value="#{tweetDistributionManagedBean.tweetType}">
<f:selectItem itemLabel="Group Tweets" itemValue="GT" />
<f:selectItem itemLabel="Event Tweets" itemValue="ET" />
<f:selectItem itemLabel="Suprachar Tweets" itemValue="ST" />
<p:ajax event="click"
listener="#{tweetDistributionManagedBean.renderUploadPanel}"
update="gtid" process="@form" />
</p:selectOneRadio>
和我正在调用的Java方法
public void renderUploadPanel(AjaxBehaviorEvent event) {
// String selecteValues = (String) event. ;
visibleGTFlag = true;
System.out.println("Method called----------->"+visibleGTFlag);
}
我想在单击复选框时重新显示此面板
<p:panel id="gtid"
rendered="#{tweetDistributionManagedBean.visibleGTFlag}"
toggleable="true">
<p:fileUpload
fileUploadListener="#{tweetDistributionManagedBean.handleFileUpload}"
mode="advanced" multiple="true" update="messages" auto="true"
sizeLimit="1048576" allowTypes="/(\.|\/)(doc|docx|xls|xlsx|pdf)$/" />
</p:panel>
但是,当我刷新此页面时,此面板呈现了我做错的事情?
问题在于,当一个组件rendered="false"
,它将不会被添加到视图树组件中,因此当前视图中的任何组件都无法引用或更新它。 这解释了为什么当您尝试通过ajax请求更新组件时此更新失败,因为您仍处于同一视图中,而当您在页面上触发完整请求时,您可以看到该组件,因为它是一个新视图。
这些问题的解决方案是将未渲染的组件包装在UIContainer中,并更新包装器组件。 您可以使用<h:panelGroup layout="block">
将其呈现为HTML div:
<p:selectOneRadio id="selectone"
value="#{tweetDistributionManagedBean.tweetType}">
<f:selectItem itemLabel="Group Tweets" itemValue="GT" />
<f:selectItem itemLabel="Event Tweets" itemValue="ET" />
<f:selectItem itemLabel="Suprachar Tweets" itemValue="ST" />
<p:ajax event="click"
listener="#{tweetDistributionManagedBean.renderUploadPanel}"
update="gtidWrapper" process="@form" />
</p:selectOneRadio>
<!-- rest of Facelets code... -->
<h:panelGrid id="gtidWrapper" layout="block">
<p:panel id="gtid"
rendered="#{tweetDistributionManagedBean.visibleGTFlag}"
toggleable="true">
<p:fileUpload
fileUploadListener="#{tweetDistributionManagedBean.handleFileUpload}"
mode="advanced" multiple="true" update="messages" auto="true"
sizeLimit="1048576" allowTypes="/(\.|\/)(doc|docx|xls|xlsx|pdf)$/" />
</p:panel>
</h:panelGrid>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.