由于上传文件过大会没有错误提示,我已经改写了tomahawk-1.1.6.jar中的org.apache.myfaces.webapp.filter.MultpartRequestWrapper类,添加了对FileUploadBase.SizeLimitExceededException异常处理,使用的jar如下:
upload.jsp
<%
@ taglib uri="http://java.sun.com/jsf/core" prefix="f"
%>
<%
@ taglib uri="http://java.sun.com/jsf/html" prefix="h"
%>
<%
@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="x"
%>
<%
@page contentType="text/html;charset=gbk"
%>
<
f:view
>
<
h:form
id
="MyForm"
enctype
="multipart/form-data"
>
<
h:messages
globalOnly
="true"
styleClass
="message"
/>
<
h:panelGrid
columns
="3"
border
="0"
cellspacing
="5"
>
<
h:outputLabel
for
="myFileId"
value
="File: "
/>
<
x:inputFileUpload
id
="myFileId"
value
="#{myBean.myFile}"
storage
="file"
required
="true"
/>
<
h:message
for
="myFileId"
/>
<
h:outputLabel
for
="myParamId"
value
="Param: "
/>
<
h:selectOneMenu
id
="myParamId"
value
="#{myBean.myParam}"
required
="true"
>
<
f:selectItem
itemLabel
=""
itemValue
=""
/>
<
f:selectItem
itemLabel
="MD5"
itemValue
="MD5"
/>
<
f:selectItem
itemLabel
="SHA-1"
itemValue
="SHA-1"
/>
<
f:selectItem
itemLabel
="SHA-256"
itemValue
="SHA-256"
/>
<
f:selectItem
itemLabel
="SHA-384"
itemValue
="SHA-384"
/>
<
f:selectItem
itemLabel
="SHA-512"
itemValue
="SHA-512"
/>
</
h:selectOneMenu
>
<
h:message
for
="myParamId"
/>
<
h:outputText
value
=" "
/>
<
h:commandButton
value
="Submit"
action
="#{myBean.processMyFile}"
/>
<
h:outputText
value
=" "
/>
</
h:panelGrid
>
</
h:form
>
</
f:view
>
detail.jsp
<
%@ taglib
uri
="http://java.sun.com/jsf/core"
prefix
="f"
%
>
<
%@ taglib
uri
="http://java.sun.com/jsf/html"
prefix
="h"
%
>

<
f:view
>

<
h:panelGrid
columns
="2"
border
="0"
cellspacing
="5"
>

<
h:outputText
value
="FileName:"
/>
<
h:outputText
value
="#{myBean.myFile.name}"
/>

<
h:outputText
value
="FileSize:"
/>
<
h:outputText
value
="#{myBean.myFile.size}"
/>

<
h:outputText
value
="Param:"
/>
<
h:outputText
value
="#{myBean.myParam}"
/>

<
h:outputText
value
="Result:"
/>
<
h:outputText
value
="#{myBean.myResult}"
/>

</
h:panelGrid
>

</
f:view
>
MyBean.java
import
java.io.BufferedInputStream;
import
java.io.BufferedOutputStream;
import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.security.MessageDigest;

import
org.apache.myfaces.custom.fileupload.UploadedFile;

public
class
MyBean
{
private UploadedFile myFile;
private String myParam;

public String getMyParam() {
return myParam;
}

public void setMyParam(String param) {
this.myParam = param;
}

public UploadedFile getMyFile() {
return myFile;
}

public void setMyFile(UploadedFile myFile) {
this.myFile = myFile;
}
public String processMyFile() {
try {
MessageDigest md
= MessageDigest.getInstance(myParam);
InputStream in = new BufferedInputStream(
myFile.getInputStream());
File temp=new File("d:/data/",myFile.getName());
FileOutputStream fos=new FileOutputStream(temp);
OutputStream out=new BufferedOutputStream(fos);
try {
byte[] buffer = new byte[10*1024*1024];
int count;
while ((count = in.read(buffer)) > 0)
md.update(buffer, 0, count);
out.write(buffer);
} finally {
in.close();
out.close();
}
return "OK";
} catch (Exception x) {
System.out.println("错误:"+x.getMessage());
return null;
}
}
}
web.xml
<?
xml version="1.0" encoding="ISO-8859-1"
?>
<
web-app
xmlns
="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version
="2.4"
>
<
context-param
>
<
param-name
>
javax.faces.STATE_SAVING_METHOD
</
param-name
>
<
param-value
>
client
</
param-value
>
</
context-param
>

<
servlet
>
<
servlet-name
>
FacesServlet
</
servlet-name
>
<
servlet-class
>
javax.faces.webapp.FacesServlet
</
servlet-class
>
<
load-on-startup
>
1
</
load-on-startup
>
</
servlet
>

<
servlet-mapping
>
<
servlet-name
>
FacesServlet
</
servlet-name
>
<
url-pattern
>
/faces/*
</
url-pattern
>
</
servlet-mapping
>

<
servlet-mapping
>
<
servlet-name
>
FacesServlet
</
servlet-name
>
<
url-pattern
>
*.faces
</
url-pattern
>
</
servlet-mapping
>

<
filter
>
<
filter-name
>
ExtensionsFilter
</
filter-name
>
<
filter-class
>
org.apache.myfaces.webapp.filter.ExtensionsFilter
</
filter-class
>
<
init-param
>
<
param-name
>
uploadMaxFileSize
</
param-name
>
<
param-value
>
10m
</
param-value
>
</
init-param
>
<
init-param
>
<
param-name
>
uploadThresholdSize
</
param-name
>
<
param-value
>
100k
</
param-value
>
</
init-param
>
</
filter
>

<
filter-mapping
>
<
filter-name
>
ExtensionsFilter
</
filter-name
>
<
servlet-name
>
FacesServlet
</
servlet-name
>
</
filter-mapping
>

<
welcome-file-list
>
<
welcome-file
>
index.jsp
</
welcome-file
>
</
welcome-file-list
>
</
web-app
>
faces-config.xml
<?
xml version="1.0"
?>
<!
DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd"
>

<
faces-config
>
<
navigation-rule
>
<
from-view-id
>
/pages/upload.jsp
</
from-view-id
>
<
navigation-case
>
<
from-outcome
>
OK
</
from-outcome
>
<
to-view-id
>
/pages/detail.jsp
</
to-view-id
>
</
navigation-case
>
</
navigation-rule
>
<
managed-bean
>
<
managed-bean-name
>
myBean
</
managed-bean-name
>
<
managed-bean-class
>
com.ycl.MyBean
</
managed-bean-class
>
<
managed-bean-scope
>
session
</
managed-bean-scope
>
</
managed-bean
>
</
faces-config
>
修改部分的MultpartRequestWrappe
try
{
requestParameters = fileUpload.parseRequest(request);
}
catch
(FileUploadBase.SizeLimitExceededException e)
{

// TODO: find a way to notify the user about the fact that the uploaded file exceeded size limit

if(log.isInfoEnabled())
log.info("user tried to upload a file that exceeded file-size limitations.",e);

requestParameters = Collections.EMPTY_LIST;
FacesMessage message = new FacesMessage(
FacesMessage.SEVERITY_ERROR,
"文件超出指定大小","文件超出指定大小");
FacesContext.getCurrentInstance().addMessage(
null, message);

}

upload.jsp

































detail.jsp






















MyBean.java


























































web.xml






















































faces-config.xml




















修改部分的MultpartRequestWrappe
















