【问题标题】:Update button in datatable after event事件后更新数据表中的按钮
【发布时间】:2014-02-20 06:24:51
【问题描述】:

我有一个简单的例子来解决我的问题。我有一个数据表,我想在排序、过滤或页面事件上禁用页脚中的按钮。我更新了页脚中的按钮,但没有任何变化。另一种形式的另一个按钮可以正常工作。如果我用“@form”更新整个表格,表格将被销毁。

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


    【解决方案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();"/>
    

    在豆子里:

    public void changeFlag(){
        visible = false;
    } 
    

    【讨论】:

    • 是的,我知道 :) 这是我在第二段中的解决方案。但是为什么我不能直接从 ajax 事件更新 foote 中的按钮?
    • 我从 2010 年就发现了一个问题......我认为它是同样的问题。我想我将解决方案与 remoteCommand 一起使用。问题链接:code.google.com/p/primefaces/issues/detail?id=1558
    • 我会尝试在晚上进行复制,但我觉得有些奇怪。
    • 你复制了吗? :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多