我的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。我需要知道 handelFileUpload 中的 id 我该如何实现?
最佳答案
我会简单地输入 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 中:
您的 BackingBean:
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!
}
关于jsf-2 - 如何从<ui :repeat>中的jsf页面获取支持Bean的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15821929/