【问题标题】:Submitting a p:fileupload with the rest of a form与表单的其余部分一起提交 p:fileupload
【发布时间】:2012-04-12 20:22:36
【问题描述】:

也许我在这里遗漏了一些明显的东西,但我似乎无法弄清楚如何完成这项工作。

我有一个 p:dialog,其中包含一个文本字段、一个选择一个菜单、一个自动完成、一个编辑器和一个文件上传对象。这个想法是用户将在字段中输入一些信息,可选择将一些文件附加到文件上传,然后按下对话框上的提交按钮,该按钮将调用我的支持 bean,进行一些处理并处理将文件获取到他们需要去的地方.我想使用高级文件上传器,以便用户可以附加多个文件。当用户按下提交按钮时,除了文件上传器之外的所有数据都被正确提交。上传监听器永远不会被触发。

我在网上做了一些搜索,发现一些引用可能能够通过调用 wigdetVar.upload() 来触发上传,但这只会引发 javascript 错误,进一步搜索表明该功能可能不再可用。

所以问题是,我如何通过提交按钮提交文件以及表单的其余部分?对话框代码如下。

<p:dialog widgetVar="newthreaddialog" modal="true" header="New Thread for #{collaborationBacking.patientName}" dynamic="true"
                       resizeable="false">
              <div class="whitebox">
                 <h:form id="newthreadform" enctype="multipart/form-data">
                    <p:panelGrid>
                       <p:row>   
                          <p:column>
                             <p:messages/>
                             <h:outputLabel for="threadtitle" value="Thread Title: "/>
                             <p:inputText id="threadtitle" label="Thread Title" value="#{newCollabThreadBacking.title}" required="true"/>
                          </p:column>
                          <p:column>
                             <h:outputLabel for="threadtype" value="Type: "/>
                             <h:selectOneMenu id="threadtype" label="Thread Type" value="#{newCollabThreadBacking.type}">
                                <f:selectItems value="#{newCollabThreadBacking.typeList}"/>
                             </h:selectOneMenu>
                          </p:column>
                       </p:row>

                       <p:row>
                          <p:column colspan="2">
                             <h:outputLabel for="addressedTo" value="To: "/>
                             <p:autoComplete id="addressedTo" value="#{newCollabThreadBacking.addressedTo}"
                                                   completeMethod="#{newCollabThreadBacking.completeAddress}"
                                                   var="practice"
                                                   itemValue="#{practice}"
                                                   itemLabel="#{practice.name}"
                                                   converter="practiceConverter"
                                                   forceSelection="true"/>
                          </p:column>
                       </p:row>


                       <p:row>
                          <p:column colspan="2">
                             <p:editor value="#{newCollabThreadBacking.content}" label="Message Content" required="true"/>
                          </p:column>
                       </p:row>

                       <p:row>
                          <p:column colspan="2">
                             <p:fileUpload widgetVar="uploader" fileUploadListener="#{newCollabThreadBacking.fileUpload}"/>
                          </p:column>
                       </p:row>

                       <p:row>
                          <p:column colspan="2">
                             <span class="submit">
                                <p:commandButton id="submitthread" value="Submit" action="#{newCollabThreadBacking.saveThread}"
                                                          oncomplete="newThreadResult(xhr, status, args)"
                                                          onclick="uploader.upload();"
                                                          process="@form" update="@form"/>
                             </span>
                          </p:column>
                       </p:row>                              
                    </p:panelGrid>
                 </h:form>
              </div>

              <p:ajax event="close" listener="#{collaborationBacking.reloadThreads}" update="threadtable newthreadform"/>
           </p:dialog> <!-- newthreaddialog -->

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    您是否添加了文件上传过滤器?您需要在 web.xml 文件中添加一个 fileUpload 过滤器才能将文件上传到服务器。尝试将以下内容添加到您的 web.xml

    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>
    

    【讨论】:

    • 是的,我确实添加了。如果我单击上传按钮,则会调用上传侦听器,但如果提交表单则不会。
    • @moneyt 我可以看看你的支持 bean 代码吗?尝试改变范围
    • 抱歉,我感觉已经删除了那组代码。为了主要解决这个问题,我让文件上传器自动上传到一个临时位置,然后让表单提交句柄将临时文件移动到它们的永久位置。我认为我在任何地方的版本控制中都没有该代码的副本。不过感谢您的帮助。
    猜你喜欢
    • 2012-03-19
    • 1970-01-01
    • 2014-09-19
    • 2015-11-23
    • 2013-12-26
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多