在 p:fileUpload 侦听器方法中获取当前迭代的数据 table 行

Getting currently iterated data table row in p:fileUpload listener method

我在 <p:dataTable> 中使用 <p:fileUpload>。上传工作正常,但我想知道侦听器方法中当前迭代的行,以便我可以更新数据库中的正确行。

XHTML:

<p:fileUpload fileUploadListener="#{doorBean.handleFileUpload}"
    mode="advanced" dragDropSupport="false" update="messages"
    sizeLimit="3000000"
    allowTypes="/(\.|\/)(gif|jpe?g|png)$/" />

豆子:

public void handleFileUpload(FileUploadEvent event) {
    this.file = event.getFile();
    ...
}

我怎样才能做到这一点?我可以向 bean 传递一个额外的参数吗?

给定一个

<p:dataTable value="#{bean.items}" var="item" ...>

要么在监听方法中从 EL 中获取当前迭代的行:

FacesContext context = FacesContext.getCurrentInstance();
Item item = context.getApplication().evaluateExpressionGet(context, "#{item}", Item.class);

或者简单地将侦听器方法从 Bean 移动到 Item:

 <p:fileUpload fileUploadListener="#{item.handleFileUpload}" ... />