在使用JSF中的h:inputFile和javax.servlet.http.Part上传之前验证文件

时间:2014-11-07 09:08:05

标签: java validation jsf jsf-2

我正在开发 JSF Web项目,该项目使用 h:inputFile 工具上传文件。我将h:inputFile的值绑定到支持bean属性输入 javax.servelt.http.Part

<h:inputFile id="inputfile" validator="#{bean.validateFile}" value="#{bean.part}"/>

此外,我在同一个支持bean中使用以下文件验证策略:

 public void validateFile(FacesContext con, UIComponent comp, Object value) {
    Part p = (Part) value;
    List<FacesMessage> list = new ArrayList<>();
    if (p.getSize() == 0) {
        list.add(new FacesMessage("File Size too small"));
    }
    if (p.getSize()>MAXSIZE) {
        list.add(new FacesMessage("File Size too Big"));
    }
    if (!list.isEmpty()) {
        throw new ValidatorException(list);
    }
}

我的问题:   使用 Part 界面会导致整个文件上传到服务器端吗? THEN 在提交表单时会得到验证(即大小)吗?

当我在本地主机(Glass fish v.4)中体验它时,我在Chrome浏览器左下角看到一条消息,指示文件上传进度,在此之后,如果文件验证错误,我会得到验证我担心在实际情况下(比如慢速互联网连接),上传文件后发送大小验证错误非常不方便!

请帮助我,如果是这种情况,我会假设发送替代解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:0)

这是正常行为。服务器需要访问该文件以对其进行验证(内容,大小......),并且访问权限只能通过用户交互来授予,例如,表格提交。

请参阅:ICEFaces inputFile getting the file content without upload