2014-10-01 62 views
2

我想從另一個表格刷新我的懶惰表格。我有以下的XHTML:Primefaces從另一個表格更新表格

<h:form id="tableform"> 
    <p:remoteCommand name="updateTable" update="table" /> 

    <p:dataTable widgetVar="tableWidget" id="table" 
     selection="#{personBean.selectedPerson}" selectionMode="single" 
     lazy="true" paginator="true" var="person" rowKey="#{person.id}" 
     value="#{personBean.personModel}" paginatorPosition="bottom" rows="5" 
     paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}">    

     <p:column filterBy="#{person.name}" headerText="Names:" 
      sortBy="#{person.name}"> 
      <h:outputText value="#{person.name}" /> 
     </p:column> 


    </p:dataTable> 

    <p:commandButton value="buttonInForm2" update=":tableform" /> 
    <p:commandButton value="buttonInForm" update="@form" /> 
</h:form> 

<h:form> 
    <p:commandButton value="directUpdate" update=":tableform" /> 
    <p:commandButton value="directUpdate" update=":tableform:table" /> 
    <p:commandButton value="remoteCommand" oncomplete="updateTable()" /> 
</h:form> 

的remoteCommand(我目前的解決方案),並從刷新表右側的按鈕。但是當我使用「directUpdate」 - 按鈕時,表格的filtertext消失。但我不明白爲什麼? (過濾器值停留在背景,但文本爲空)

我知道我可以在表上使用widgetVar.filter(),但比paginator將被重置。我的解決方案是remoteCommand,它可以正常工作,並且使用當前頁面和過濾器重新加載表格。 (歡迎提供更好的解決方案)

問題爲什麼重置directUpdate表單中的文本和更新不是?

感謝您的時間。

回答

1

<p:dataTable>有其自己的隱藏輸入,其中包括分頁,選擇和過濾,以便服務器端知道客戶端狀態。這樣它就可以準備並返回與客戶端相同的狀態。

如果您提交某個表單,則只會發送包含在特定表單中的輸入,而不是其他表單。這不是JSF特定的問題。 HTML一直以這種方式工作。否則,萬維網看起來會非常不同。

通過從表單外部調用<p:remoteCommand>,您基本上提交了「正確」的形式,即它所包含的也包含數據表的表單。

請注意,您本身不需要<p:commandButton>,只是簡單的<p:button ... onclick="updateTable(); return false;">已經足夠。即使是第二種形式對於這項工作來說也是不必要的

+0

感謝您對隱藏輸入的解釋。是的,第二種形式只是在我的大範例中,但你是對的,我不需要它。謝謝:) – pL4Gu33 2014-10-01 18:08:50

+0

不客氣。 – BalusC 2014-10-01 18:09:09

相關問題