2014-01-28 48 views
1

我有一個簡單的例子來解決我的問題。我有一個數據表,我想要禁用排序,過濾器或頁面事件頁腳中的按鈕。我更新頁腳中的按鈕,但沒有任何更改。另一種形式的另一個按鈕可以正常工作。如果我用「@form」更新整個表格,表格將被銷燬。事件後的數據表中的更新按鈕

我找到了Primefaces Extensions pe:RemoteCommand(http://fractalsoft.net/primeext-showcase-mojarra/sections/remoteCommand/basicUsage.jsf)的解決方案...如果我使用事件的onComplete-方法並調用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> 

豆:

@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> 

在Ajax調用:

<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

是的,我知道:)這是我的第二通道解決方案。但爲什麼我不能直接從ajax事件更新腳中的按鈕? – pL4Gu33

+0

我從2010年發現了一個問題...我認爲它是同樣的問題。我想我使用remoteCommand的解決方案。問題鏈接:http://code.google.com/p/primefaces/issues/detail?id=1558 – pL4Gu33

+0

我會在晚上嘗試複製,但我認爲有些奇怪。 –

相關問題