2009-07-05 116 views
0

我正在面對ice:inputFile組件的嚴重問題。 當上傳過程中發生錯誤(如:無效文件名錯誤,空文件名錯誤,超過最大尺寸錯誤)時,我使用ice:message標籤來顯示這些錯誤消息。 我使用ice:panelPopup並在其中顯示ice:inputFile組件。 問題是:當我切換上傳彈出錯誤消息仍然出現,我需要任何方式來清除這些消息。輸入文件組件錯誤消息

請幫助我,任何幫助表示讚賞......................... :)

回答

1

我不是100%確定,如果我正確地理解了你的問題,但是我猜想在觸發彈出窗口的動作上應用的關鍵字會幫助你。

<ice:commandLink 
    action="#{this.popup}" 
    immediate="true"> 
     <h:outputText value="foo" /> 
</ice:commandLink> 

在常規JSF生命週期,動作事件的處理驗證階段之後通常被解僱。此外,值將從UI更新到模型。

立即屬性,基本上每個可導致任何類型事件的JSF組件都可用,繞過驗證,並取決於事件類型以及模型更新階段。

alt text http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (蓋瑞,HORSTMANN,2008年核心的JavaServer Faces - 第二版Prentice Hall出版。)

你會發現在太陽JSF教程關於這個主題的更多信息:The immediate Attribute

0

這裏有兩件事已經爲我工作。

將您的ice:inputFile組件綁定到您的支持bean上的屬性,並在關閉彈出窗格時手動調用屬性上的reset方法。

<ice:inputFile binding="#{Bean.uploadedFile}"/>

class BackingBean { 
    private UICommand uploadedFile; 

    public UICommand getUploadedFile() { return uploadedFile; } 
    public void setUploadedFile(UICommand uploadedFile) { this.uploadedFile = uploadedFile; } 

    public void onClose(ActionEvent event) { 
     ((InputFile) uploadedFile).reset(); 
    } 
} 

- 或 -

添加一個ActionListener你的冰:INPUTFILE組件。這將停止inputFile組件將自己的驗證錯誤添加到上下文中。您可以在actionListener方法中實現所需的任何驗證,並使用ice:messages標記顯示驗證錯誤。我發現這比依靠inputFile的驗證更好,因爲它使您可以完全控制錯誤消息的文本/樣式,並且當彈出窗口消失時會自動清除錯誤消息。

<ice:inputFile actionListener="#{Bean.onFileUpload}"/>

public class BackingBean { 
    public void onFileUpload(ActionEvent event) { 
     FileInfo info = ((InputFile) event.getSource()).getFileInfo(); 
     switch (info.getStatus()) { 
      case FileInfo.SAVED : 
       // handle uploaded file 
      case FileInfo.SIZE_LIMIT_EXCEEDED : 
       // file too big error 
      ... 
     } 
    } 
}