カスタムインターセプタの命名規則がstruts2に存在するかどうか知りたいと思っています。アクションクラスのためのものです。Struts2のstruts.xmlを避けるためにカスタムインターセプタクラスとパッケージに使用する命名規則
私は "struts2-convention-plugin-2.3.24.1.jar"を使用しています。 "struts.xml" なしと "custInterceptor" なし
ProtienTracker
>Java Resources
>src
>com.nagarro.actions
>HelloAction.java
>com.nagarro.interceptors
>custInterceptor.java
>WebContent
>META_INF
>WEB_INF
>content
>hello.jsp
>lib
>web.xml
コードは完璧に実行に従うよう
パッケージ構造です。このアクションは、struts2-convention-pluginによって自動的に検出されます。できるだけ早く私は、下図のように、私はエラーを取得
@org.apache.struts2.convention.annotation.Action(value="hello",
[email protected]("custInterceptor"))
で迎撃を取り付けるよう
。
ファイルは以下の通りです
Hello.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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Hello</title>
</head>
<body>
<h1><s:property value="greeting"/></h1>
<p>hi</p>
</body>
</html>
HelloAction.java
package com.nagarro.actions;
import com.opensymphony.xwork2.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Result;
public class HelloAction implements Action {
private String greeting="ab";
@Override
@org.apache.struts2.convention.annotation.Action(value="hello",
[email protected]("custInterceptor"))
public String execute() throws Exception {
setGreeting("Hello Structs 2");
return "success";
}
public String getGreeting() {
return greeting;
}
public void setGreeting(String greeting) {
this.greeting = greeting;
}
}
custInterceptor.java
package com.nagarro.interceptors;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class custInterceptor implements Interceptor{
private static final long serialVersionUID = 1L;
@Override
public void destroy() {
System.out.println("custInterceptor destroy() is called...");
}
@Override
public void init() {
System.out.println("custInterceptor init() is called...");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("custInterceptor intercept() is called...");
System.out.println(invocation.getAction().getClass().getName());
return invocation.invoke();
}
}
私は次のエラーを取得する:
Caused by: Unable to find interceptor class referenced by ref-name custInterceptor - [unknown location]
at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:63)
at org.apache.struts2.convention.DefaultInterceptorMapBuilder.buildInterceptorList(DefaultInterceptorMapBuilder.java:95)
at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:86)
at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:70)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.createActionConfig(PackageBasedActionConfigBuilder.java:947)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildConfiguration(PackageBasedActionConfigBuilder.java:734)
at org.apache.struts2.convention.PackageBasedActionConfigBuilder.buildActionConfigs(PackageBasedActionConfigBuilder.java:355)
at org.apache.struts2.convention.ClasspathPackageProvider.loadPackages(ClasspathPackageProvider.java:53)
at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:274)
at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:67)
... 17 more
[docs](https://struts.apache.org/docs/convention-plugin.html)を読んでください。 –
*「ref-name XYZによって参照されるインターセプタ・クラスが見つかりません」などのエラーが発生した場合。つまり、Conventionがあなたの行動をとっているパッケージは、インターセプタが定義されているパッケージを拡張しません。この問題を解決するには、1)インターセプタを定義するパッケージの名前を渡す@ParentPackageアノテーション(またはstruts.convention.default.parent.package)を使用するか、または2)インターセプタを定義するパッケージを拡張するパッケージをXMLで作成する@ParentPackage(またはstruts.convention.default.parent.package)を使用してポイントしてください。* –
"custInterceptor.java"クラスにどのコードステートメントを追加する必要がありますか教えてください。 またはインターセプタクラスのコードのリンク例? –