2012-04-12 3 views
0

아마도 여기에서 확실하지 않은 것이 있지만이 작업을 수행하는 방법을 알아낼 수 없습니다.p : fileupload를 양식 나머지 부분과 함께 제출

텍스트 필드, 하나의 메뉴 선택, 자동 완성, 편집기 및 fileupload 개체가 포함 된 p : 대화 상자가 있습니다. 아이디어는 사용자가 필드에 정보를 입력하고 선택적으로 파일 업로드에 파일을 첨부 한 다음 내 백킹 빈을 호출하는 대화 상자의 제출 버튼을 누르고 일부 처리를 수행하고 그들이 필요로하는 파일을 처리하는 것입니다 . 사용자가 여러 파일을 첨부 할 수 있도록 고급 파일 업 로더를 사용하고 싶습니다. 사용자가 제출 버튼을 누르면 파일 업로드 프로그램을 제외한 모든 데이터가 올바르게 제출됩니다. 업로드 수신기는 절대로 실행되지 않습니다.

나는 온라인 검색 중 일부를 수행하여 wigdetVar.upload() 호출로 업로드를 트리거 할 수 있다고 언급했지만 자바 스크립트 오류가 발생하고 추가 검색을 통해 더 이상 기능을 사용할 수 없음을 알게되었습니다 .

그러면 제출 버튼의 나머지 양식과 함께 파일을 제출할 수 있습니까? 대화 상자의 코드는 다음과 같습니다.

<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