Leo*_*Leo 5 java jsf primefaces jsf-2
我正在使用primefaces 4.
我正在使用可编辑的表,当我编辑单元格时,调用侦听器方法传递CellEditEvent
像这样
public void onCellEdit(CellEditEvent event) {
/*
* The rowIndex here can be changed according to the sorting/filtering.
* FilteredData starts as null, but primefaces initializes it, so you
* don't have to check for NPE here
*/
int alteredRow = event.getRowIndex();
UIColumn o = event.getColumn();
System.out.println(this.filteredData.get(event.getRowIndex()).get(columns.get(0)));
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
该事件有一个getRowIndex()
但它没有getColumnIndex().
相反,它有一个getColumn()方法,返回一个UIColumn对象.
问题是,在调试时,我找不到获取任何列信息的方法(名称,id等)
我可以破解该列以获得一些像这样的唯一ID
<p:ajax event="cellEdit" listener="#{myMB.onCellEdit}"/>
<c:forEach items="#{myMB.columns}" var="column" varStatus="loop">
<p:column id="col#{loop.index}" headerText="#{column}" sortBy="#{column}" filterBy="#{column}" filterMatchMode="contains"/>
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{dataRow[column]}" />
</f:facet>
<f:facet name="input">
<p:inputText value="#{dataRow[column]}" />
</f:facet>
</p:cellEditor>
</p:column>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
但我仍然找不到从CellEditEvent中检索列id的方法
所以,假设一个单元格是一个有行和一列的东西,我不得不问
如何在CellEditEvent中检索已编辑单元格的列?
PS.我觉得我错过了一些东西,因为没有人会在没有提供行和列的情况下创建单元格事件,对吧?
更新 - 似乎我可以获得ID
org.primefaces.component.column.Column o = (org.primefaces.component.column.Column)event.getColumn();
Run Code Online (Sandbox Code Playgroud)
不过,这对我来说似乎是个黑客.我仍然对这个更优雅的解决方案感兴趣;-)
您可以通过返回您传递的列标题来获取列.
在bean中你可以这样做:
public void onCellEdit(CellEditEvent event) {
int alteredRow = event.getRowIndex();
String column_name;
column_name=event.getColumn().getHeaderText();
// now you can use this to identify the column we are working on.
}
Run Code Online (Sandbox Code Playgroud)
使用getColumnId()或getColumnKey()返回列Id,但添加了primefaces代码 - 使其难以使用.
归档时间: |
|
查看次数: |
5919 次 |
最近记录: |