有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

exceljava。lang.ClassCastException:ExcelStreamAction无法强制转换为com。开放交响乐团。xwork2。行动

我正在使用strut2开发一个应用程序。有一个报表模块,它接受excel文件,读取并向用户提供另一个excel和所需数据。 代码如下。 行动:

import java.io.*;

public class ExcelStreamAction {
    private InputStream fileStream;

    public void setFileStream(InputStream arg) {
        fileStream = arg;
    }

    public InputStream getFileStream() {
        return fileStream;
    }

    public String preview() throws Exception {
        try {
            fileStream = new DataInputStream(new FileInputStream(
                    "c:/test/client.xlsx"));
        } catch (IOException ioEx) {
            ioEx.printStackTrace();
        }
        return "test-stream";
    }
}

文件上传。jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Upload</title>
</head>
<body>
    <s:form action="test" method="post" enctype="multipart/form-data">
        <table>
            <tr>
                <td>
                    <h3>Welcome,</h3>
                </td>
                <td><h3>
                        <s:property value="userName"></s:property>
                    </h3></td>
            </tr>
            <!-- <label for="myFile">Upload your file</label> <input type="file"
            name="myFile" id="myFile" /> <input type="submit" value="Upload" /> -->

            <tr>
                <td><s:file label="Upload" name="myFile"></s:file>
                <%-- <s:textfield name="uploadPath" id="path"/><br> --%>
                </td>
                <td><s:submit label="Upload"></s:submit></td>


        </tr>
        </table>
    </s:form>
</body>
</html>

struts。xml

   <?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE struts PUBLIC     
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.convention.result.path" value="/"></constant>
    <constant name="struts.devMode" value="true" />
    <constant name="struts.multipart.maxSize" value="1000000" />



    <package name="user" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="authentication"
                class="interceptor.AuthenticationInterceptor"></interceptor>
            <interceptor-stack name="authStack">
                <interceptor-ref name="authentication"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <default-interceptor-ref name="authStack"></default-interceptor-ref>
        <global-results>
            <result name="login" type="redirect">/home.action</result>
        </global-results>
        <action name="home">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result>/login.jsp</result>
        </action>
        <action name="login" class="action.LoginAction">
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/FileUpload.jsp</result>
            <result name="input">/login.jsp</result>
        </action>
        <action name="welcome" class="action.WelcomeAction">
            <result name="success">/welcome.jsp</result>
        </action>
        <action name="read" class="com.dp_report.action.ReadExcelAction">
            <result name="success">/readSuccess.jsp</result>
            <!-- <result name="error">/readError.jsp</result> -->
        </action>

        <action name="test" class=".action.ExcelStreamAction"
            method="preview">
            <result name="test-stream" type="stream">
                <param name="inputName">fileStream</param>
                <param name="contentType">application/vnd.ms-excel</param>
                <param name="contentDisposition">filename="Client.xlsx"</param>
            </result>
        </action>


    </package>
</struts> 

这就是AuthenticationInterceptor类中的上述错误。如果没有拦截器,我的输出会非常出色。这可能是我的一个小错误,但我无法准确地找出解决方法

认证接收器

    import java.util.Map;

import com.dp_report.model.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class AuthenticationInterceptor implements Interceptor {
    private static final long serialVersionUID = -5011962009065225959L;

    @Override
    public void destroy() {
        // release resources here
    }

    @Override
    public void init() {
        // create resources here
    }

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        System.out.println("inside auth interceptor");
        Map<String, Object> sessionAttributes = actionInvocation
                .getInvocationContext().getSession();
        User user = (User) sessionAttributes.get("USER");
        if (user == null) {
            return Action.LOGIN;
        } else {
            Action action = (Action) actionInvocation.getAction();
            if (action instanceof UserAware) {
                ((UserAware) action).setUser(user);
            }
            return actionInvocation.invoke();
        }
    }
}

堆栈跟踪:

  java.lang.ClassCastException: action.ExcelStreamAction cannot be cast to com.opensymphony.xwork2.Action 
    com.dp_report.interceptors.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:32)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    java.lang.Thread.run(Unknown Source)

错误在AuthenticationInterceptor.java类的第32行Action action = (Action) actionInvocation.getAction();我能做些什么来解决它?感谢您的帮助


共 (0) 个答案