使用columnToggler在toggleEvent中获取列组件对象

时间:2015-06-22 09:48:56

标签: javascript jquery ajax jsf primefaces

我在获取Column组件对象时遇到问题。

以下是应该实施的逻辑:

  1. 用户使用primefaces columnToggler切换表列(当用户单击复选框时,调用ajax侦听器方法)
  2. 在listener方法中,我必须检索Column组件对象和调用方法,该方法将Column组件对象及其可见性参数存储在数据库中,因此可以在页面加载时检索它。
  3. 基本上这只是一个简单的用户唯一的复选框 - 列可见性“记住”事物。

    现在,一切都很好,我在用户切换其中一个复选框时调用ajax监听器方法:

    <p:commandButton id="columnToggler" type="button" value="Columns"/>
    <p:columnToggler datasource="grid" trigger="columnToggler">
    <p:ajax event="toggle" listener="#{bean.onColumnToggle}"/>
    </p:columnToggler>
    

    问题是我不知道如何获取Column组件对象,因为与cellEditEvent不同,toggleEvent没有返回Column对象的getColumn()方法。

    有没有人知道如何获得它?

2 个答案:

答案 0 :(得分:1)

  

columnChooser组件提供了可选的切换ajax行为   在服务器端侦听切换事件。监听这种行为   获取一个org.primefaces.event.ToggleEvent作为给出的参数   正在切换的列的可见性和索引

请尝试这个例子:

<p:growl id="growl" showDetail="true" sticky="true" />
...
<p:commandButton id="columnToggler" type="button" value="Columns" />            
<p:columnToggler datasource="grid" trigger="columnToggler">
    <p:ajax event="toggle" listener="#{bean.onColumnToggle}" update="growl"/>
</p:columnToggler>

在你的bean中:

public void onColumnToggle(ToggleEvent event) {
    final Visibility visibility = event.getVisibility();
    final FacesMessage msg = new FacesMessage();

    msg.setSummary("Column index " + event.getData().toString() + " toggled");
    msg.setDetail("Visibility: " + visibility);
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

答案 1 :(得分:1)

也许你可以使用数据表的方法

DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(formId).findComponent(tableId);

看一下这些方法,有一个名为getColumns的方法很有用。