Strutsアクションの複数のエントリポイント(移行Struts 2.2.3 - > 2.3.1)
質問
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の後でさえも前に送信タグと連携します。定数
<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";
}
}
. 所属していません StackOverflow