我的xhtml:
<ui:repeat value="#{c.voices}" var="v">
<h:form enctype="multipart/form-data">
<p:fileUpload fileUploadListener="#{AddNote.handleFileUpload}"
converterMessage="converterMessage"
mode="advanced"
update="messages"
sizeLimit="100000"
allowTypes="/(.|/)(gif|jpe?g|png)$/">
</p:fileUpload>
<p:growl id="messages" showDetail="true"/>
</h:form>
</ui:repeat>
我BackingBean :
public void handleFileUpload(FileUploadEvent event) {
//int v.id= here i need to know the v.id value from ui:repeater
FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
FacesContext.getCurrentInstance().addMessage(null, msg);
}
c。voices是对象列表。每个对象都有属性id。我需要知道id在handelFileUpload我怎么能做到这一点?
我会简单地将v.id
放在一个隐藏字段中:
xhtml:
<ui:repeat value="#{c.voices}" var="v">
<h:form enctype="multipart/form-data">
<input type="hidden" name="vid" value="#{v.id}" />
<p:fileUpload fileUploadListener="#{AddNote.handleFileUpload}"
converterMessage="converterMessage"
mode="advanced"
update="messages"
sizeLimit="100000"
allowTypes="/(.|/)(gif|jpe?g|png)$/">
</p:fileUpload>
<p:growl id="messages" showDetail="true"/>
</h:form>
</ui:repeat>
然后用FacesContext
把它放回bean中:
public void handleFileUpload(FileUploadEvent event) {
HttpServletRequest request = (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.getParameter("vid"); // <= Here you are!
}
如评论中所述,每个迭代将有自己的<h:form
和自己的<input type="hidden" name="vid"
。当一个文件被上传时,handleFileUpload
将用封闭表单的数据触发,因此vid
参数将与正确的#{v.id}
更新2
正如BalusC评论的那样,你应该最好这样得到vid
参数:
public void handleFileUpload(FileUploadEvent event) {
FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("vid") // <= Here you are!
}