Múltiples puntos de entrada en la acción de Struts (Migración de Struts 2.2.3 -> 2.3.1)

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

  •  26-12-2019
  •  | 
  •  

Pregunta

Tengo una acción en 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>

un 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>

con varios elementos de forma, todos vinculados a una acción.Cada formulario tiene un botón de envío individual con un distintivo method (p.ej."tiendaPdfReprint").Cada method se asigna a un método en la clase correspondiente.

Todo funciona bien con Struts 2.2.3.Pero después de la migración a 2.3.1, la asignación de métodos no funciona.En lugar de llamar al método correspondiente (p. ej."shopPdfReprint"), sólo el execute-Se invoca el método de la clase.

He mirado los documentos, pero desafortunadamente no he encontrado ni idea, ¿cómo adaptarse a 2.3.1 alguien se encontró con esto?Se agradece la ayuda :]

¿Fue útil?

Solución

Esto sucede porque has desactivado DMI.El method El atributo funciona con la etiqueta de envío como antes, incluso después de reenviar correcciones de seguridad.Habilite DMI usando la constante

<constant name="struts.enable.DynamicMethodInvocation" value="true"/> 

avíseme si no funcionó.

Otros consejos

Si alguien se está moviendo o trabajando en Struts 2.5, entonces no tiene que asignar acciones usando struts.xml.Strtus 2.5 se basa en anotaciones, por lo que el desarrollador de clases de acción puede asignar múltiples acciones dentro de una sola clase mediante anotaciones.

Puede que este enlace sea útil desde las versiones antiguas de struts hasta la versión 2.5 de struts.

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

A continuación se muestra el código de demostración simple.

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";
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top