在我的 Struts2 代码中使用注释时,我遇到了这个问题。
我的 Annotated Action 类看起来像这样,它使用拦截器,我的架构基于 Spring 3、Struts 2,并使用 Struts2 Convention Plugin
@InterceptorRefs({
@InterceptorRef("mylogging")
})
public class LoginAction implements ModelDriven{
User user = new User();
List<User> users = new ArrayList<User>();
UserBo userBo;
@Action(value="/login",results={@Result(name="success",type="chain",location="/jsp/successPage.jsp"),
@Result(name="login",type="chain",location="/jsp/userLogin.jsp")})
public String execute() {
if(user.getUserScreenName()==null)
return "login";
System.out.println(userBo.verifyUser(user));
return "success";
}
我还试图附上我的部署描述符的详细信息
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts.xml
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/resources/config/SpringBeans.xml</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
我已经定义了我的拦截器struts.xml
,我只是用它来定义拦截器和结果类型
<struts>
<constant name="struts.devMode" value="false" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.convention.package.locators.basePackage" value="com.abc.lab"/>
<constant name="struts.convention.action.checkImplementsAction" value="false"/>
<constant name="struts.convention.package.locators" value="action,actions,struts,struts2"/> <package name="default" extends="struts-default" namespace="/">
<interceptors>
<interceptor name="mylogging"
class="com.abc.lab.interceptor.LoggingInterceptor">
</interceptor>
<interceptor-stack name="loggingStack">
<interceptor-ref name="mylogging" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors> </package> </struts>
我也尝试过devMode
true 或 false 但没有帮助。
我的目录结构是
+--LmsWar/
| +--pom.xml
| +--src/
| | +--com/
| | | +--abc/
| | | | +--lab/
| | | | | +--actions/
| | | | | | +--HomeAction.java
| | | | | | +--LoginAction.java
| | | | | +--bo/
| | | | | | +--impl/
| | | | | | | +--UserBoImpl.java
| | | | | | +--UserBo.java
| | | | | +--dao/
| | | | | | +--impl/
| | | | | | | +--UserDAOImpl.java
| | | | | | +--UserDAO.java
| | | | | +--filter/
| | | | | +--interceptor/
| | | | | | +--LoggingInterceptor.java
| | | | | +--listener/
| | | | | +--model/
| | +--resources/
| | | +--com/
| | | | +--abc/
| | | | | +--lab/
| | | | | | +--spring/
| | | | | | | +--UserBean.xml
| | | +--config/
| | | | +--database/
| | | | | +--properties/
| | | | | | +--database.properties
| | | | +--spring/
| | | | | +--DataSource.xml
| | | | | +--HibernateSessionFactory.xml
| | | | +--SpringBeans.xml
| | +--struts.properties
| | +--struts.xml
| +--WebRoot/
| | +--jsp/
| | | +--common/
| | | +--layout/
| | +--WEB-INF/
| | | +--classes/
| | | +--lib/
| | | +--tiles.xml
| | | +--web.xml
编辑:
在了解更多细节并添加详细日志之后,我的日志中又多了一件事情。
2013-07-23 16:40:01,578 ERROR com.opensymphony.xwork2.util.finder.ClassFinder.error:38 - Unable to read class [com.abc.lab.actions.LoginAction] java.lang.NoSuchMethodError: org.objectweb.asm.ClassReader.accept(Lorg/objectweb/asm/ClassVisitor;I)V
这只是我在这里提到的一个例外,而它对我的应用程序中可用的每个操作类都给出了相同的例外。