2012-04-12 3 views
0

おそらく私はここで何かを見逃しているかもしれませんが、私はこの作業の仕方を理解できないようです。p:fileuploadをフォームの残りの部分と一緒に提出する

私は、テキストフィールド、選択メニュー、オートコンプリート、エディタ、およびファイルアップロードオブジェクトを含むp:ダイアログを持っています。アイデアは、ユーザーがフィールドに情報を入力し、ファイルアップロードにいくつかのファイルを添付して、バッキングビーンを呼び出すダイアログボックスのサブミットボタンを押して、処理を行い、必要な場所にファイルを取得することです。私はユーザーが複数のファイルを添付できるように、高度なファイルアップローダーを使用したいと思います。ユーザーが送信ボタンを押すと、ファイルアップロードを除いてすべてのデータが正しく送信されます。アップロード・リスナーは決して起動されません。

オンラインで検索したところ、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

ファイルアップロードフィルタを追加しましたか?ファイルをサーバーにアップロードできるようにするには、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> 
+0

はい、私はそれを追加しました。また、アップロードボタンをクリックするとアップロードリスナーが呼び出されますが、フォームが送信された場合は呼び出されません。 – moneyt

+0

@moneytバッキングビーンのコードは表示できますか?スコープを変更してみてください – fareed

+0

申し訳ありませんが、私はそのコードセットを削除しました。主にこの問題を解決するために、私はファイルアップローダーを一時的な場所に自動アップロードしてから、一時提出ファイルを永続的な家に移動させるためにフォーム提出の処理をしました。私はバージョン管理のどこにでもそのコードのコピーを持っているとは思わない。あなたの助けをありがとう。 – moneyt

関連する問題