输入文件组件错误消息

时间:2009-07-05 12:14:32

标签: jsf icefaces

我遇到了严重的ice问题:inputFile组件。 当上传过程发生错误时(如:无效文件名错误,空文件名错误,超出最大大小错误),我使用ice:message标签显示这些错误消息。 我使用ice:panelPopup并在其中显示ice:inputFile组件。 问题是:当我切换上传弹出窗口时仍会出现错误信息,我需要以任何方式清除这些信息。

请帮助我,任何帮助表示赞赏.........................:)

2 个答案:

答案 0 :(得分:1)

我不是百分百肯定,如果我正确理解了您的问题,但是我想在触发弹出窗口的操作上应用的立即关键字会对您有帮助。

<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 (Geary,Horstmann,2008。核心JavaServer Faces - 第二版.Prentice Hall)

您可以在太阳JSF教程中找到有关此主题的更多信息:The immediate Attribute

答案 1 :(得分: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();
    }
}

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(); } }

-OR -

向你的ice:inputFile组件添加一个actionListener。这将阻止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
            ...
        }   
    }
}