如何在PrimeFaces fileUpload中将参数发送到fileUploadListener

时间:2013-06-21 10:29:03

标签: file-upload jsf-2 primefaces spring-webflow

当我创建模型时,我想保存模型的图像。我正在使用PrimeFaces fileUpload组件。当我保存图片时,我想知道特定图像所指的模型。这就是为什么我需要将模型的id发送到支持bean。

是否有可能将 id 模型发送到 fileUploadListener

<h:form enctype="multipart/form-data">
  <p:panelGrid columns="2">
    <h:outputLabel for="hotelName" value="#{msg.hotelName}"/>
    <p:inputText value="#{apartmentNew.name}" id="hotelName"/>
    <h:outputLabel for="hotelDescription" value="#{msg.hotelDescription}"/>
    <p:inputText value="#{apartmentNew.description}" id="hotelDescription"/>
    <h:outputLabel for="hotelImages" value="#{msg.hotelImages}"/>
    <h:form enctype="multipart/form-data">
      <p:fileUpload id="hotelImages"
                    fileUploadListener="#{apartments.handleImageUpload}"
                    mode="advanced"
                    sizeLimit="10000000"
                    allowTypes="/(\.|\/)(gif|jpe?g|png)$/">
      </p:fileUpload>
    </h:form>
  </p:panelGrid>
  <p:commandButton id="saveApartmentButton" value="#{msg.save}" action="save"/>
  <p:commandButton id="cancelCreationApartmentButton" value="#{msg.cancel}" 
     action="cancel"/>
</h:form>

4 个答案:

答案 0 :(得分:33)

不是通过请求参数。您可以通过组件属性执行此操作。

E.g。

<p:fileUpload ...>
    <f:attribute name="foo" value="bar" />
</p:fileUpload>

String foo = (String) event.getComponent().getAttributes().get("foo"); // bar

答案 1 :(得分:1)

我需要传递一个关键参数和上传的文件。我在APPLY_REQUEST_VALUES阶段发现fileUploadListener执行,因此我无法在f:attribute标记中使用EL表达式。我还试图使用event.getComponent().findComponent("id")找到值,但是虽然组件存在,但值为null。我认为一个@ViewScoped bean会修复缺失的值,但我固执地试图将我的bean保持在@RequestScoped,直到我绝对没有其他选择。最后,我必须使用FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")

获得的{{1}}

答案 2 :(得分:0)

类型错误:

String foo = event.getComponent().getAttributes().get("foo");

相反,这样做:

Object foo = event.getComponent().getAttributes().get("foo");

Integer foo = (Integer) event.getComponent().getAttributes().get("foo");

答案 3 :(得分:0)

You can use:

<div onclick="#{myBean.myMethod(myParam)}" >
                <p:fileUpload id="fileUpload" fileUploadListener="#{myBean.onFileUplod}" mode="advanced" dragDropSupport="true"
                    update=":messages" process="@this" >
                </p:fileUpload>
        </div>  

Method in myBean:

public void myMethod(String myParam) {

            selectedMyParam = myParam;
           }

Then you can use selectedMyParam in onFileUpload method.