簡體   English   中英

渲染在Primefaces5 + JSF2中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM