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) 个答案