2014-10-01 2 views
2

Я хочу обновить свой lazytable от другого. У меня есть следующие: XHTMLТаблица обновлений поверхностей из другой формы

<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», фильтр-текст таблицы исчезает. Но я не понимаю, почему? (Значение фильтра остается на заднем плане, но текст пуст)

Я знаю, что я могу использовать widgetVar.filter() на таблице, но постраничный паттерн будет сброшен. Мое решение - remoteCommand, и все работает отлично, и таблица перезагружается текущей страницей и фильтрует. (Лучшее решение приветствуется)

Вопрос, почему сбросить directUpdate текст и обновление в форме нет?

Спасибо за внимание.

ответ

1

У <p:dataTable> есть свои скрытые входы, среди прочего, разбиение на страницы, выбор и фильтрацию, чтобы серверная сторона знала состояние клиентской стороны. Таким образом, он может подготовить и вернуть то же состояние, что и на стороне клиента.

Если вы отправляете определенную форму, будут отправляться только входы, содержащиеся в конкретной форме, а не из других форм. Это не проблема JSF. HTML всегда работал так. В противном случае мировая сеть выглядела бы совсем по-другому.

С вызовом <p:remoteCommand> вне формы вы в основном представляете «правильную» форму, а именно ту, в которой она содержится, в которой также содержится таблица данных.

Обратите внимание, что для этого вам не нужен <p:commandButton>, достаточно простого <p:button ... onclick="updateTable(); return false;">. Даже вся вторая форма не нужна для работы.

+0

Спасибо за объяснение со скрытыми вводами. Да, вторая форма была только в моем большом примере, но вы правы, мне это не нужно. Спасибо :) – pL4Gu33

+0

Добро пожаловать. – BalusC

Смежные вопросы