2

我的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我怎样才能做到这一点?

4

1 回答 1

3

我会简单地放入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

你的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!
}
于 2013-04-04T22:18:30.243 回答