Несколько точек входа в действии Struts (Migration 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>

с несколькими элементами формы, привязанными к одному действию.Каждая форма имеет отдельную кнопку отправки с отдельным method (например.«shopPdfReprint»).Каждый method сопоставляется с методом соответствующего класса.

Со Struts 2.2.3 все работает нормально.Но после перехода на 2.3.1 сопоставление методов не работает.Вместо этого вызывайте соответствующий метод (например."shopPdfReprint"), только execute- вызывается метод класса.

Я посмотрел на документы, но, к сожалению, понятия не обнаружил, как адаптироваться к 2.3.1 кто -нибудь столкнулся с этим?Помощь приветствуется :]

Это было полезно?

Решение

Это происходит потому, что вы отключили DMI.А method Атрибут работает с тегом отправки, как и раньше, даже после повторных исправлений безопасности.Включите 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";
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top