2014-01-28 5 views
1

У меня есть простой пример для моей проблемы. У меня есть datatable, и я хочу отключить кнопку в нижнем колонтитуле на сортировке, фильтрации или событии страницы. Я обновляю кнопку в нижнем колонтитуле, но ничего не меняется. Другая кнопка, в другой форме, отлично работает. Если я обновляю всю форму таблицы с помощью «@form», таблица будет уничтожена.Кнопка обновления в datatable после события

Я нашел решение с расширениями Primefaces pe: RemoteCommand (http://fractalsoft.net/primeext-showcase-mojarra/sections/remoteCommand/basicUsage.jsf) ... если я использую onComplete- Methodode Event и вызываю remoteCommand, то я могу обновить кнопку в нижнем колонтитуле оттуда.

Может кто-нибудь объяснить мне это? Спасибо за ваше время.

XHTML:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
xmlns:f="http://java.sun.com/jsf/core" 
xmlns:h="http://java.sun.com/jsf/html" 
xmlns:ui="http://java.sun.com/jsf/facelets" 
xmlns:p="http://primefaces.org/ui"> 
<h:head></h:head> 
<h:body> 
<h:form id="tableform"> 
    <p:dataTable value="#{bean.personList}" var="person" paginator="true" 
     rows="5" rowKey="#{person.id}"> 
     <p:ajax event="page" listener="#{bean.onPaging}" 
      update=":outform:buttonOut buttonIn" /> 
     <p:ajax event="filter" listener="#{bean.onFilter}" 
      update=":outform:buttonOut buttonIn" /> 
     <p:ajax event="sort" listener="#{bean.onSort}" 
      update=":outform:buttonOut buttonIn" /> 

     <p:column headerText="id" sortBy="#{person.id}" 
      filterBy="#{person.id}"> 
    #{person.id}   
    </p:column> 

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

     <f:facet name="footer"> 

      <p:commandButton id="buttonIn" value="ButtonIn" 
       disabled="#{!bean.visible}" /> 
     </f:facet> 
    </p:dataTable> 
</h:form> 

<h:form id="outform"> 
    <p:commandButton id="buttonOut" value="ButtonOut" disabled="#{!bean.visible}" /> 
</h:form> 

Bean:

@ManagedBean 
@ViewScoped 
public class Bean { 

private List<Person> personList; 



private boolean visible = true; 

@PostConstruct 
public void init(){ 
    personList = new ArrayList<Person>(); 
    for(int i = 0 ; i < 100 ; i++){ 
     personList.add(new Person(i, "Person" +i)); 
    } 
} 

public void onPaging(PageEvent event){ 
    visible = false; 
} 

public void onSort(SortEvent event){ 
    visible = false; 
} 

public void onFilter(FilterEvent event){ 
    visible = false; 
} 


public boolean isVisible() { 
    return visible; 
} 

public void setVisible(boolean visible) { 
    this.visible = visible; 
} 

public List<Person> getPersonList() { 
    return personList; 
} 

public void setPersonList(List<Person> personList) { 
    this.personList = personList; 
} 

}

ответ

1

Если вы используете remoteCommand вы можете сделать это:

<h:form id="tableform"> 
..... 
<p:remoteCommand name="doAction" actionListener="#{bean.changeFlag}" 
update="idOfYourDataTable:buttonIn" 
immediate="true"/> 
....... 
</h:form> 

В Аякса вызовов:

<p:ajax event="page" oncomplete="doAction();"/> 
<p:ajax event="filter" oncomplete="doAction();"/> 
<p:ajax event="sort" oncomplete="doAction();"/> 

В Bean:

public void changeFlag(){ 
    visible = false; 
} 
+0

да я знаю :) это было мое решение во втором проходе. Но почему я не могу обновить кнопку в foote от ajax-события напрямую? – pL4Gu33

+0

Я нашел для него проблему с 2010 года ... я думаю, что та же проблема. Я думаю, что я использую решение с remoteCommand. Ссылка на вопрос: http://code.google.com/p/primefaces/issues/detail?id=1558 – pL4Gu33

+0

Я попытаюсь воспроизвести по ночам, но я думаю, что есть что-то странное. –

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