jsf-2 - 如何从<ui :repeat>中的jsf页面获取支持Bean的参数

标签 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="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/

相关文章:

java - 单击树节点时如何打开新的 div

jsf - PrimeFaces 是否有类似 o :param (solution to add complex parameter for outputFormat)? 的内容

jquery - widgetVar 不能在 p :fileUpload 中使用

java - 模拟类型转换对象

jsf-2 - JSF 2 DataTable 通过 AJAX 更新

java - 为什么我可以将立即评估 ${bean.property} 与可写属性一起使用?

java - JSF 实用程序类

html - JSF 2.0 图形图像 : set background-image by css

css - 如何使用自定义样式覆盖默认的 PrimeFaces CSS?

java - JSF 页面中组件(面板)的可变顺序