1

xml 構成の struts2 マッピングを使用する古いプロジェクトがあります。spring mvc で行うように、少し新鮮にして注釈マッピングを使用したかったのです。だから私は、struts2がそれを可能にすることを発見しました。しかし、私が追加した後

    <dependency>
        <groupId>org.apache.struts</groupId>
        <artifactId>struts2-convention-plugin</artifactId>
        <version>${org.apache.struts.version}</version>
    </dependency>

私のpom xmlに。XML 構成が機能しなくなりました。

ここに私が持っているものがありますstruts.xml

    <action name="my/home" class="my.dhblah.MyAction">
        <result type="redirectAction">my/home/search</result>
    </action>

maven pom からプラグインを削除しました。ストラットをデバッグしましたがDefaultActionInvocation.createResult()、オンラインで表示されるproxy.getConfig()のは次のとおりです。

result = {com.opensymphony.xwork2.config.entities.ActionConfig@10444}"{ActionConfig my/home (my.dhblah.MyAction) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10447} size = 20
params = {java.util.Collections$UnmodifiableMap@10448} size = 0
results = {java.util.Collections$UnmodifiableMap@10449} size = 2
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10450} size = 1
className = {java.lang.String@10451}"my.dhblah.MyAction"
methodName = null
packageName = {java.lang.String@10452}"my"
name = {java.lang.String@10453}"my/home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10454} size = 1
location = null

セクションを展開すると、 "results"2 つの結果のマッピングが表示"success"され、"exception"

プラグインを有効にするpom.xmlと、同じ行に次のように表示されます。

config = {com.opensymphony.xwork2.config.entities.ActionConfig@10457}"{ActionConfig home (my.dhblah.MyAction.execute()) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10460} size = 18
params = {java.util.Collections$UnmodifiableMap@10461} size = 0
results = {java.util.Collections$UnmodifiableMap@10462} size = 0
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10463} size = 0
className = {java.lang.String@10464}"my.dhblah.MyAction"
methodName = {java.lang.String@10395}"execute"
packageName = {java.lang.String@10465}"my.dhblah#convention-default#/my"
name = {java.lang.String@10466}"home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10467} size = 1
location = null

そのURLにアクセスした後、次のエラーが発生しました。

Struts Problem Report

Struts has detected an unhandled exception:

Messages:   
No result defined for action my.dhblah.MyAction and result success
Stacktraces

No result defined for action my.dhblah.MyAction and result success
    com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)

@Actionに注釈を追加しませんでしMyActionたが、convention-plugin が古いActionクラスを取得し、xml 構成を調べる前にマッピング構成を作成しているように見えます。そのため、結果に何もマップされていないというエラーが発生します"success"

誰かがこの問題を抱えていて、それを解決する方法はありますか?

4

1 に答える 1

1

これらは異なるアクション構成です。ただし、Struts 構成を介してアクションをマップすると、アクション マッピングを取得するロジックが実装され、アクション マッパーによって実行されます。デフォルトで使用されるアクションマッパーのデフォルト実装があります。コンベンション プラグインはその設定を xml 設定に追加することを知っておく必要があります。そのため、実行時に重複するアクションが構成されている可能性があります。アクション マッピングを作成するためにアクション マッパーがどの構成要素を取得するかを予測することは困難です。この種の設定の問題を解決するには、Config Browser Pluginを使用できます。

Config Browser は、実行時に Struts 構成を表示するのに役立つシンプルなツールです。構成の問題に関連する可能性のある問題をデバッグする場合に非常に役立ちます。

プラグインをインストールするには、依存関係に追加するだけです

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-config-browser-plugin</artifactId>
    <version>${org.apache.struts.version}</version>
</dependency>

このプラグインは、プラグイン jar をアプリケーションの/WEB-INF/libディレクトリにコピーすることでインストールできます。

于 2014-09-12T10:49:07.547 に答える