2014-12-23 66 views
1

我試圖在我的<p:fileUpload>中進行驗證。當用戶上傳時沒有放置任何文件,他會得到一條錯誤消息。我正在使用mode="simple"required="true",但required="true"不起作用。FileUpload required =「true」在PrimeFaces中不起作用

P.S:我需要使用mode="simple",因爲我需要<p:commandButton>才能提交其他數據。

<p:panelGrid columns="2"> 
    <h:outputLabel id="image" value="Select Image: *" /> 

    <p:fileUpload value="#{Jcalendar.file}" mode="simple" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
        required="true" 
        requiredMessage="File not selected !!"/> 

    <f:facet name="footer"> 
     <p:commandButton value="Submit" 
         ajax="false" 
         action="#{Jcalendar.Upload}" 
         update=":form:msgs" /> 
    </f:facet> 
</p:panelGrid> 
+0

包含您自己的自定義驗證程序的驗證程序不能使用''。 – Tiny

+0

@Tiny你能告訴我怎麼做?我是新來的primefaces – Moodi1409

+0

除了把驗證邏輯放入''的監聽器(或者可能是sonewhere)中,除了一些繁瑣的黑客/自制的重新編譯器之外,沒有其他可以完成。 [見例如](http://stackoverflow.com/q/13865136/1391249)(和[也許](http://stackoverflow.com/q/22659268/1391249))。 – Tiny

回答

0

如每5.2源代碼,這確實會當正在使用的代替Apache的百科全書文件上傳的Servlet 3.0天然載失敗。

NativeFileUploadDecoder#decodeSimple()只會在沒有提交輸入時纔會將提交的值設置爲空字符串。如果輸入實際提交了,但是這個值是空的,這將會失敗。

51  if(part != null) { 
52   fileUpload.setTransient(true); 
53   fileUpload.setSubmittedValue(new NativeUploadedFile(part)); 
54  } 
55  else { 
56   fileUpload.setSubmittedValue(""); 
57  } 

CommonsFileUploadDecoder#decodeSimple()會intented提交的值設置爲空字符串時,提交的文件名是空的,沒錯。

54  if(file != null) { 
55   if(file.getName().equals("")) { 
56    fileUpload.setSubmittedValue(""); 
57   } else { 
58    fileUpload.setTransient(true); 
59    fileUpload.setSubmittedValue(new DefaultUploadedFile(file)); 
60   } 
61  } 

你最好的選擇,以得到它的工作是報告一個問題PrimeFaces球員,並在同時或者自定義/補丁的渲染器,也可以切換回共享上傳。

相關問題