我上传的文件<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
标签上写错误,我错了吗?
如何解决问题?
最好的问候
答案 0 :(得分:4)
你不能用战斧来做这件事。但是,您可以在ExtensionsFilter
中配置uploadMaxFileSize
,但是当它发生时,它会强制抛出SizeLimitExceededException
,这超出了所有JSF的内容,因此最终用户最终会变得丑陋HTTP 500错误页面。虽然您可以在web.xml
中定义自定义错误页面,这些错误页面应仅针对某些状态代码或例外类型显示,但您无法在最终可以显示的FacesMessage
中得到它。 h:message
。
完成这一切的唯一方法就是允许无限大小的上传或大约1GB的限制(这可能是一个痛苦,但毕竟,这只是客户自己的决定;)...以避免抱怨客户端,确保在表单中某处有关于允许的最大大小的清除消息。通过这种方式,您可以获得真实的Validator
,它会在关联的ValidatorException
中显示h:message
,例如:
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."));
}
}
答案 1 :(得分:0)
就像Balus C所说,这是一个众所周知的问题。请参阅:http://issues.apache.org/jira/browse/TOMAHAWK-1381
我认为Tomahwak的更高版本修复了此问题。