action代码:private String fileName;
private InputStream inputStream;
public String getFileName() {
try {
fileName = new String(fileName.getBytes("ISO-8859-1"),"utf-8");
} catch (Exception e) {
e.printStackTrace();
}
return fileName;
}
public void setFileName(String fileName) {
try {
fileName = new String(fileName.getBytes("ISO-8859-1"),"utf-8");
} catch (Exception e) {
e.printStackTrace();
}
this.fileName = fileName;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public InputStream getInputStream() {
System.out.println(ServletActionContext.getServletContext().getResourceAsStream("/share/" + fileName));
return ServletActionContext.getServletContext().getResourceAsStream("/share/" + fileName);
}
public String downloadShare(){
System.out.println("download!");
return "successs";
}
struts2.xml
<action name="downloadShare" class="shareAction" method="downloadShare">
<result name="success" type="stream">
<param name="contentType">application/octet-stream;charset=utf-8</param>
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">4096</param>
</result>
</action>在文件下载的时候发现可以进入action的下载方法中但是没有调用getInputStream()方法,同时报以下错误
java.lang.RuntimeException: Invalid action class configuration that references an unknown class named [shareAction]
org.apache.struts2.convention.ConventionsServiceImpl.determineResultPath(ConventionsServiceImpl.java:100)
org.apache.struts2.convention.ConventionUnknownHandler.determinePath(ConventionUnknownHandler.java:385)
org.apache.struts2.convention.ConventionUnknownHandler.handleUnknownResult(ConventionUnknownHandler.java:274)
com.opensymphony.xwork2.DefaultUnknownHandlerManager.handleUnknownResult(DefaultUnknownHandlerManager.java:76)
com.opensymphony.xwork2.DefaultActionInvocation.createResult(DefaultActionInvocation.java:215)
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:356)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)高手看看啊

解决方案 »

  1.   

    public String downloadShare(){
            System.out.println("download!");
            return "successs";
        }
    控制台可以输出download!
      

  2.   

    有沒有其他設定與 shareAction 有關?
    錯誤碼說 Invalid action class configuration that references an unknown class named [shareAction] 
    顯然問題就出在 shareAction的設定。
      

  3.   

    能说的具体点吗,shareAction里面是同时实现上传和下载的
      

  4.   

    shareAction这个类没有包名吗?还有,类的第一个字母不是应该大写吗?
      

  5.   

    你的错误在于你提供了private InputStream inputStream;属性是不必要的 还有不要为这个属性提供set和get方法 你只需要在Action提供返回值为InputStream的getXXXX方法即可!!!!! 看不懂请看下面的代码:public class DownLoadAction {
    // 获取下载文件的名称
    private String value; /**
     * @return the value
     * @throws Exception 
     */
    public String getValue() throws Exception {
    return value;
    } /**
     * @param value the value to set
     * @throws Exception 
     */
    public void setValue(String value) throws Exception {
    this.value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
    }

    /**
     * 将下载的文件读取到内存流中
     * @return
     * @throws Exception 
     */
    public InputStream getDownLoadFiles() throws Exception {
    HttpServletResponse response = ServletActionContext.getResponse();
    response.setHeader("Content-Disposition", "attachment;fileName="+URLEncoder.encode(value,"utf-8"));
    return ServletActionContext.getServletContext().getResourceAsStream("/files/"+value);
    }

    /**
     * 提供下载文件的方法
     * @return
     */
    public String downLoad() {
    return "success";
    }


    }