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;
}
}
是的,我知道:)這是我的第二通道解決方案。但爲什麼我不能直接從ajax事件更新腳中的按鈕? – pL4Gu33
我從2010年發現了一個問題...我認爲它是同樣的問題。我想我使用remoteCommand的解決方案。問題鏈接:http://code.google.com/p/primefaces/issues/detail?id=1558 – pL4Gu33
我會在晚上嘗試複製,但我認爲有些奇怪。 –