2011-05-20 137 views
0

我試圖在primefaces中使用更新標記來顯示/不顯示primefaces數據表。在JSF中更新和呈現標記

當我重新加載(F5)頁面時,該表格將正確呈現,但然後我將丟失所有我已經注入表單的數據。我正在四處尋找ajax解決方案,但到目前爲止我還找不到任何解決方案。

我的代碼:

<h:form id="adminForm"> 
    <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}"> 
    <f:selectItem itemValue="" itemLabel="- Select One -"/> 
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminForm" /> 
    </h:selectOneMenu> 
    <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}" 
    emptyMessage="No Records Found"> 
    ... 
    </p:dataTable> 
</h:form> 

當前實現顯示數據表,但刪除任何表單輸入我了。有沒有辦法在不清除我的表單值的情況下呈現數據表?

更新:剛試過相同的代碼沒有和使用,但得到了同樣的結果,仍然嘗試其他方法!

+0

您的adminBean的範圍是什麼? – 2011-05-20 22:44:50

+0

這是一個對話範圍 – user560785 2011-05-20 23:09:38

+0

'#{adminBean.Type}'無效。它不應該是'#{adminBean.type}'嗎?你嘗試過'update =「adminMacTable」'? – BalusC 2011-05-21 03:38:44

回答

0

試試這個:

<h:form id="adminForm" prependId="false"> 
    <h:selectOneMenu id="adminTypeMenu" value="#{adminBean.orgType}"> 
    <f:selectItem itemValue="" itemLabel="- Select One -"/> 
    <p:ajax actionListener="#{adminBean.updateOrgType}" update="adminMacOutput" /> 
    </h:selectOneMenu> 
    <p:outputPanel id="adminMacOutput"> 
    <p:dataTable id="adminMacTable" value="#{adminBean.currentArray}" var="currentOrg" 
    rendered="#{adminBean.Type eq 'bco'}" selection="#{adminBean.selectedMac}" 
    emptyMessage="No Records Found"> 
    ... 
    </p:dataTable> 
    </p:outputPanel> 
</h:form> 

如果還是不行,請嘗試將DataTable中一個單獨的表單中,並更新該第二種形式。

+0

p:outputPanel是正確的解決方案!我以前實際使用過它,但忘記了它是多麼有用:)。謝謝! – user560785 2011-05-26 04:45:12

0

我在猜測AdminBean可能在請求範圍內,在這種情況下,您的ajax事件會更新它,但當您按F5時它會被重新創建。如果是的話ViewScoped將幫助:

@ManagedBean(name = "adminBean") 
@ViewScoped 
public class AdminBean { 

} 
+0

目前的實現是對話作用域,我只是再次嘗試同樣的事情,但用p:面板而不是表單。同樣的行爲不幸的是:( – user560785 2011-05-20 23:10:17