2015-01-07 51 views
1

我在<p:dataTable>中使用<p:fileUpload>。上傳工作正常,但我想知道監聽器方法中當前迭代的行,以便我可以更新我的數據庫中的右側行。在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嗎?

+0

這取決於您如何在視圖上表示數據庫行?例如,你是否使用了像

這樣的迭代器組件?如果是的話,你應該能夠傳遞一個完全獨立的行標識符/不管''。 – Tiny

+0

'fileupload'是'datatable'的子節點 – mbauer

+0

由於您使用的是PrimeFaces,本質上'datatable'應該更可能是''。 ''可以給你一個代表目標行(你想編輯/更新)的模型對象。因此,在執行更新操作時(在CRUD中),傳遞表示行標識符的獨立(標量)值沒有意義。您可以使用整個模型對象以及InputStream或byte []來更新該行(您應該可以在動作(偵聽器)方法中執行此操作)。你不是嗎?與''一起傳遞一個值有什麼意義? – Tiny

回答

4

給定一個

<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}" ... /> 
相關問題