Question

J'ai une action dans 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>

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

avec plusieurs éléments de formulaire, tous liés à une seule action.Chaque formulaire possède un bouton de soumission individuel avec un nom distinct method (par exemple."shopPdfReprint").Chaque method est mappé sur une méthode dans la classe correspondante.

Tout fonctionne bien avec Struts 2.2.3.Mais après la migration vers 2.3.1, le mappage de méthodes ne fonctionne pas.Au lieu d'appeler la méthode correspondante (par ex."shopPdfReprint"), seul le execute-la méthode de la classe est invoquée.

J'ai regardé les documents, mais malheureusement, je n'ai trouvé aucun indice, comment s'adapter au 2.3.1 Quelqu'un a rencontré cela?L'aide est appréciée :]

Était-ce utile?

La solution

Cela se produit parce que vous avez désactivé DMI.Le method L'attribut fonctionne avec la balise submit comme avant, même après le renvoi des correctifs de sécurité.Activer DMI en utilisant la constante

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

faites-moi savoir si cela n'a pas fonctionné.

Autres conseils

Si quelqu'un déménage ou travaille sur Struts 2.5, il n'a pas besoin de mapper les actions à l'aide de struts.xml.Strtus 2.5 est basé sur des annotations, de sorte que dans la classe d'action, le développeur peut mapper plusieurs actions dans une seule classe à l'aide d'annotations.

Ce lien peut-il être utile depuis les anciennes versions de Struts vers la version Struts 2.5.

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

Voici le code de démonstration 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";
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top