Jsf 2 如何从<;用户界面:重复>;
我的xhtml:Jsf 2 如何从<;用户界面:重复>;,jsf-2,primefaces,Jsf 2,Primefaces,我的xhtml: <ui:repeat value="#{c.voices}" var="v"> <h:form enctype="multipart/form-data"> <p:fileUpload fileUploadListener="#{AddNote.handleFileUpload}" converterMessage="converterMessage" mode="adv
<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>
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>
更新
正如注释中所述,每个迭代都有自己的
,因为迭代而无法工作:不会有一个隐藏的输入,而是一堆。仔细看,隐藏的输入在中同意,我监督了多个表单。您能否编辑答案,以便我可以推翻我的投票?更新了一些澄清,从技术上讲,这是一个很好的答案,但有一点建议:javax.servlet.
JSF工件中的导入必须尽量避免,因为它们表明紧密耦合或只是一种“笨拙”的方法(阅读:JSF很可能已经提供了更干净的API提供的方法,您应该使用这些方法)。在这种情况下,您应该使用ExternalContext#getRequestParameterMap()
。或者,当bean是请求范围时,在目标属性上使用@ManagedProperty(“{param.vid}”)
。
<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>
public void handleFileUpload(FileUploadEvent event) {
HttpServletRequest request = (HttpServletRequest)
FacesContext.getCurrentInstance().getExternalContext().getRequest();
request.getParameter("vid"); // <= Here you are!
}
public void handleFileUpload(FileUploadEvent event) {
FacesContext.getCurrentInstance().getExternalContext()
.getRequestParameterMap().get("vid") // <= Here you are!
}