2011-04-12 47 views
1

我有一個JSF頁面,允許用戶上傳圖片。我想對上傳的文件執行一些驗證,以確保它是正確的大小,尺寸,內容類型等。我創建了一個JSF驗證器,並試圖在<s:fileUpload validator="XXX" />屬性中指定它,並且使用<f:validator />標記。但是,不管我怎麼試驗我的驗證器都不會被調用。有沒有什麼方法可以在Seam中驗證文件上傳?將使用<rich:fileUpload />允許我對上傳的文件進行驗證?Seam:驗證s:fileUpload?

回答

1

大量的試驗和錯誤之後,我就決定做在我提交方法的人工確認。我還沒有找到一種方法讓Validator對象成功運行。

0

你可以像一個監聽嘗試(不知道事件有一個取消方法,如果你的約束失敗打電話,但你可以檢查):

public void listener(UploadEvent event) throws IOException { 
    UploadItem item = event.getUploadItem(); 

    String name = "unnamed_attachment"; 
    byte[] data = item.getData(); 

    if (item.isFile()) { 
     name = FilenameUtils.getName(item.getFileName()); 
     data = FileUtils.readFileToByteArray(item.getFile()); 
    } 

    debug("file uploaded '#0' : '#1'", name, item.getFileName()); 

你可以把在components.xml一些約束,如:

<web:multipart-filter create-temp-files="false" max-request-size="5200000" url-pattern="/*"/>

+0

我以前使用過一個的偵聽器,但從來沒有。它是否支持這個組件?還是隻有RichFaces組件? – Shadowman 2011-04-12 18:37:47

+0

是的,你是對的,actionListener不存在s:fileUpload。也許你可以使用轉換器? – 2011-04-12 19:00:57