我正在使用 <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/