【问题标题】:h:inputFile value becomes blank after submit or validation fail of other input, how to retain its value?h:inputFile 值在其他输入提交或验证失败后变为空白,如何保留其值?
【发布时间】:2015-08-09 17:45:45
【问题描述】:

对于许多其他标准 JSF 组件,当提交表单并且服务器端验证失败时,页面会再次呈现,并填写先前提交的表单字段供用户编辑和重新提交。我正在从新的 h:inputFile 中寻找相同的行为,但我没有找到它。

作为一个简单的例子,我有一个带有 h:inputText 和 h:inputFile 的表单。 inputText 启用了服务器端验证。如果用户输入了无效文本并选择了一个文件并提交,该文件将被上传,并且在文本字段中使用无效文本和一个指示验证结果的 h:message 来呈现表单。我试图解决的问题是此时他们更正了他们的文本输入,但必须再次选择一个文件,然后再次上传。我是否缺少一些基本的东西,或者这是预期的行为?

【问题讨论】:

    标签: forms validation file-upload jsf-2 jsf-2.2


    【解决方案1】:

    HTML 不允许预填充 <input type="file">,否则会打开 huge security hole。由于 JSF 在这种情况下只是一个 HTML 代码生成器,因此它不能做太多的事情。

    最好的办法是 ajax-submit 表单和 ajax-render 真正需要更新的部分,例如消息(即不要使用 render="@form")。这样初始输入值就保持不变。

    例如

    <h:form enctype="multipart/form-data">
        <h:inputText id="text" />
        <h:message id="m_text" for="text" />
    
        <h:inputFile id="file" />
        <h:message id="m_file" for="file" />
    
        <h:commandButton value="submit">
            <f:ajax execute="@form" render="m_text m_file" />
        </h:commandButton>
    </h:form>
    

    另见:

    【讨论】:

      猜你喜欢
      • 2019-08-24
      • 1970-01-01
      • 2015-01-04
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多