【问题标题】:Input File component error messages输入文件组件错误消息
【发布时间】:2009-07-05 12:14:32
【问题描述】:

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

请帮助我,感谢任何帮助............. :)

【问题讨论】:

    标签: jsf icefaces


    【解决方案1】:

    我不能 100% 确定,如果我正确理解了您的问题,但我想 immediate 关键字应用于触发弹出窗口的操作会帮助您。

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

    在常规的 JSF 生命周期中,动作事件通常在流程验证阶段之后触发。此外,值将从 UI 更新到模型。

    immediate 属性基本上可用于所有可能导致任何类型事件的 JSF 组件,它绕过验证,并且根据事件类型,还绕过模型更新阶段。

    alt text http://img43.imageshack.us/img43/3900/jsfimmediatecomponents.png (Geary,Horstmann,2008 年。Core JavaServer Faces - 第二版。Prentice Hall)

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

    【讨论】:

      【解决方案2】:

      这里有两件事对我有用。

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

      -或-

      为你的 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
                  ...
              }   
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 2014-10-01
        • 2014-10-10
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多