Несколько точек входа в действии 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>
с несколькими элементами формы, все связаны с одним действием. Каждая форма имеет отдельную кнопку отправки с отдельным method
(например, "shopPdfReprint"). каждый method
отображается на метод в соответствующем классе.
Все отлично работает со Struts 2.2.3. Но после перехода на 2.3.1 метод-мэппинг не работает. Вместо вызова соответствующего метода (например, "shopPdfReprint"), только execute
метод класса вызывается.
Я посмотрел на Документы, но, к сожалению, не нашел подсказки, как адаптироваться к 2.3.1 Кто-нибудь сталкивался с этим? Помощь приветствуется:]
2 ответа
Это происходит потому, что вы отключили DMI. method
Атрибут работает с тегом submit, как и раньше, даже после повторной отправки исправлений безопасности. Включить DMI используя константу
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
дайте мне знать, если это не сработало.
Если кто-то перемещается или работает над Struts 2.5, ему не нужно отображать действия с использованием struts.xml. Strtus 2.5 основан на аннотациях, поэтому в классе действий разработчик может отобразить несколько действий в одном классе с помощью аннотации.
Может быть, эта ссылка полезна со старых версий Struts до версии Struts 2.5.
https://struts.apache.org/docs/struts-23-to-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";
}
}