也许我在这里遗漏了一些明显的东西,但我似乎无法弄清楚如何使这项工作。
我有一个p:对话框,其中包含一个文本字段,一个选择菜单,一个自动完成,一个编辑器和一个fileupload对象。想法是用户将在字段中输入一些信息,可选择将一些文件附加到文件上载,然后按对话框上的提交按钮,该按钮将调用我的支持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 -->
答案 0 :(得分:0)
您是否添加了文件上传过滤器?您需要在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>