Strutsアクションの複数のエントリポイント(移行Struts 2.2.3 - > 2.3.1)

StackOverflow https://stackoverflow.com//questions/20052630

  •  26-12-2019
  •  | 
  •  

質問

struts.xml

でアクションを持っています
<action name="reprint" class="reprintAction">
        <result name="success" type="redirectAction">
            <param name="actionName">reprint</param>
            <param name="namespace">/x</param>
            <param name="errorFlag">${errorFlag}</param>
            <param name="message">${message}</param>
        </result>
        <result name="view">/jsp/reprintOverview.jsp</result>
</action>
.

JSP:

<s:form action="reprint">
    <s:select name="selectedPdfPrinter" list="shopPdfPrinterList" listKey="deviceId" listValue="deviceId" theme="simple"/>
    <s:submit value="Print" theme="simple" method="shopPdfReprint"/>
</s:form>
.

複数のフォーム要素を持つ、すべて1つのアクションにバインドされます。 各フォームには、個別の送信ボタンが異なるmethod(「shoppdfreprint」)を持ちます。 各methodは、対応するクラスのメソッドにマッピングされます。

Struts 2.2.3ではすべてがうまく機能しています。しかし2.3.1への移行後、Method-Mappingは機能していません。代わりに、対応する方法(「shoppdfreprint」)を呼び出すと、クラスのexecuteメソッドのみが呼び出されます。

私はドキュメントを見ましたが、残念ながら手がかりが見つかりませんでした、2.3.1への適応方法 誰もがこれに走った?助けが高く評価されています:]

役に立ちましたか?

解決

これはDMIをオフにしているために起こります。method属性は、SESBLE SECURITY FIXESの後でさえも前に送信タグと連携します。定数

を使用してDMIを有効にします
<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 
.

うまくいかなかったかどうか私に知らせてください。

他のヒント

誰かがStruts 2.5に移動または作業している場合は、struts.xmlを使用してアクションをマップする必要はありません。 STRTUS 2.5はアノテーションベースで、Action Class Developerは注釈を使用して単一クラス内の複数のアクションをマッピングできます。

は、Struts 2.5バージョンからStruts 2.5バージョンへの古いStrutsのバージョンから役立ちます。

https://struts.apache.org/docs./ Struts-23-25-migration.html

以下は単純なデモコードです。

package com.stsh.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionSupport;
import com.stsh.intercepter.AuthRequired;

@ParentPackage(value="default")
@Namespace(value="/dashboard")
public class DashboardAction extends ActionSupport implements AuthRequired{

    private static final long serialVersionUID = 1L;

    @Action(value = "home", results = { @Result(name = "success", location = "dashboard.tiles", type = "tiles") })
    public String dashboard(){
        return "success";
    }
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top