PrimeFaces DataTable CellEdit获取实体/对象

Chr*_*Geo 10 jsf facelets primefaces

我有一个数据表,它显示基于List <>的各种实体.当我选择一个单元格进行编辑时,我希望能够以某种方式获取实体以便更新它.当然有event.getRowIndex,然后我可以使用List <>,但这并不总是方便的.是否有另一种方法可以从CellEditEvent获取实体?

Bal*_*usC 27

一种方法是以编程方式EL评估当前<p:dataTable var>.

给出一个

<p:dataTable value="#{bean.entities}" var="entity">
Run Code Online (Sandbox Code Playgroud)

你可以得到如下

public void onCellEdit(CellEditEvent event) {
    FacesContext context = FacesContext.getCurrentInstance();
    Entity entity = context.getApplication().evaluateExpressionGet(context, "#{entity}", Entity.class);
    // ...
}
Run Code Online (Sandbox Code Playgroud)

另一种方法,如果你对CellEditEvent参数不感兴趣,那就是CellEditEvent通过将当前迭代的实体作为参数传递来完全覆盖参数:

<p:ajax event="cellEdit" listener="#{bean.onCellEdit(entity)}" />
Run Code Online (Sandbox Code Playgroud)

public void onCellEdit(Entity entity) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,您无法保留CellEditEvent并传递其他参数.否则显然会给出这个答案.


use*_*596 12

我一直在努力解决这个问题二,我不喜欢依赖var名称,所以我找到了这个解决方案:

public void onCellEdit(CellEditEvent event) {  
    Entity entity =(Entity)((DataTable)event.getComponent()).getRowData();
}
Run Code Online (Sandbox Code Playgroud)

请注意,实体更新后可以直接合并到DB中,也可以获得旧值.PS:谢谢你@BalusC的一切:)