我在获取Column组件对象时遇到问题。
以下是应该实现的逻辑:
- 用户使用primefaces columnToggler切换表列(当用户单击复选框时,将调用ajax侦听器方法)
- 在listener方法中,我必须检索Column组件对象和调用方法,该方法将Column组件的对象及其可见性参数存储在数据库中,以便在加载页面时检索它
基本上,这只是一个简单的用户唯一的复选框列可见性"记住"的事情。
现在,一切都很好,当用户切换其中一个复选框时,我调用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()方法。
有人知道怎么得到它吗?
columnChooser组件提供可选的切换ajax行为以侦听服务器端的切换事件。此行为的侦听器获取org.timefaces.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>
在你的豆子里:
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);
}
也许您可以使用数据表的方法
DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot().findComponent(formId).findComponent(tableId);
看看这些方法,有一个叫做getColumns的方法非常有用。