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>
true または falseでも試しましdevMode
たが、役に立ちませんでした。
私のディレクトリ構造は
+--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
編集:
詳細を調べて詳細なログを追加した後、ログにもう 1 つ記録されました。
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
ここで言及した例外は 1 つだけですが、アプリケーションで使用できる各アクション クラスで同じ例外が発生します。