gpt4 book ai didi

java - 在 Primefaces5+JSF2 中渲染不工作

转载 作者:行者123 更新时间:2023-12-01 12:49:17 24 4
gpt4 key购买 nike

这是我的 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"时它不会被添加到 View 树组件中,因此它不能被当前 View 中的任何组件引用或更新。这解释了为什么当您尝试通过 ajax 请求更新组件时此更新会失败,因为您仍然处于同一 View 中,而当您在页面上触发完整请求时,您可以看到该组件,因为它是一个新 View .

这些问题的解决方案是将非渲染组件包装在 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>

关于java - 在 Primefaces5+JSF2 中渲染不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com