0
也許我錯過了一些明顯的東西,但我似乎無法弄清楚如何使這項工作。提交p:fileupload與表格的其餘部分
我有一個p:對話框,它包含一個文本字段,一個選擇菜單,一個自動完成,一個編輯器和一個文件上傳對象。這個想法是,用戶將輸入一些信息到字段中,可選地將一些文件附加到fileupload上,然後按下將調用我的支持bean的對話框上的提交按鈕,執行一些處理並處理將文件放在需要的位置。我想使用高級文件上傳器,以便用戶可以附加多個文件。當用戶按下提交按鈕時,除了fileuploader之外,所有數據都會正確提交。上傳偵聽器永遠不會被觸發。
我做了一些在線搜索,發現一些引用可能能夠通過調用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 -->
是的,我確實補充了這一點。如果點擊上傳按鈕,上傳偵聽器將被調用,但如果提交表單則不會。 – moneyt 2012-04-16 12:38:37
@moneyt我可以看到你的支持bean代碼嗎?嘗試改變範圍 – fareed 2012-06-09 11:03:02
對不起,我感覺丟棄了那套代碼。爲了主要解決這個問題,我把文件上傳器自動上傳到一個臨時位置,然後讓表單提交句柄將臨時文件移動到永久的家中。我不認爲我在任何地方的版本控制中都有該代碼的副本。儘管感謝您的幫助。 – moneyt 2012-06-19 19:15:08