Jsf 2 如何从<;用户界面:重复>;

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

我的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>

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!
}