jsf - 使用 tomahawk 上传文件 - 显示错误消息的问题

标签 jsf tomahawk

我正在使用 <t:inputFileUpload 上传文件一切工作正常,但当文件大于 web.xml 中设置的值时,它不会输出任何错误或警告消息。 我的代码:

  <h:form id="uploadForm" enctype="multipart/form-data">    
               <t:inputFileUpload id="fileupload" accept="image/*" storage="file"
                    value="#{fileUpload.uploadedFile}" styleClass="fileUploadInput"
                    required="true" validator="epacient.FileUploadValidator"  validatorMessage="Napacna vrsta ali prevelika datoteka."/>
                <h:message for="fileupload" style="color: red;" />
                <br />
                <h:commandButton value="Upload" id="fileUploadButton" action="#{fileUpload.upload}" />
                <h:message for="uploadForm" style="color: red;" />
   </h:form>

如果文件太大,它应该在 <h:message 处写入错误标签,我错了吗?

如何解决这个问题?

最诚挚的问候

最佳答案

你不能用战斧做到这一点。不过,您可以在 ExtensionsFilter 中配置 uploadMaxFileSize ,但是当它发生时,它会硬抛出 SizeLimitExceededException这超出了所有 JSF 的范围,因此最终用户最终会得到一个丑陋的 HTTP 500 错误页面。尽管您可以在 web.xml 中定义自定义错误页面(仅针对某些状态代码或异常类型显示),但您无法在 FacesMessage 中很好地获取它最后您可以在 h:message 中显示它。

唯一能很好地做到这一点的方法是允许无限大小的上传或 1GB 左右的限制(这可能很痛苦,但毕竟这只是客户自己的决定;)..以避免提示客户,请确保表单中的某处有关于允许的最大大小的明确消息)。这样您就可以利用真正的 Validator ,它将在关联的 h:message 中显示 ValidatorException,例如:

private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
    if (((UploadedFile) value).getSize() > MAX_FILE_SIZE) {
        throw new ValidatorException(new FacesMessage("Sorry, max 10MB allowed."));
    }
}

关于jsf - 使用 tomahawk 上传文件 - 显示错误消息的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250265/

相关文章:

ajax - PrimeFaces 可编辑数据表,带有自定义验证器和 Omnifaces

jsf - 如何在 JSF 中实现登录过滤器?

jsf - 如何显示超出 Tomahawk FileInput 控件的大小限制

css - JSF 菜单未格式化 STLyed

java - 如果我们使用 <t :columns> in JSF?,如何对数据表进行排序

jsf - 我可以在 JSF 2.2 中使用 JSF 2.0 兼容的组件库吗

jsf - 在 JSF 中国际化链接的模式

java - 如何在 JSF 中支持同一种语言的多个区域设置?

jsf - 将输入类型 ="radio"指定为 JSF 直通元素时,名称属性被覆盖