Frage

Ich habe eine Aktion in 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>

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

mit mehreren Formularelementen, alle an eine Aktion gebunden.Jedes Formular verfügt über eine individuelle Absenden-Schaltfläche mit einem eindeutigen Symbol method (z.B.„shopPdfReprint“).Jede method wird auf eine Methode in der entsprechenden Klasse abgebildet.

Mit Struts 2.2.3 funktioniert alles einwandfrei.Aber nach der Migration auf 2.3.1 funktioniert die Methodenzuordnung nicht.Rufen Sie stattdessen die entsprechende Methode auf (z. B.„shopPdfReprint“), nur die execute-Methode der Klasse wird aufgerufen.

Ich habe mir die Dokumente angesehen, aber leider keine Ahnung gefunden, wie man sich an 2.3.1 anpasst, ist jemand darauf gestoßen?Hilfe ist willkommen :]

War es hilfreich?

Lösung

Dies geschieht, weil Sie DMI deaktiviert haben.Der method Das Attribut funktioniert mit dem Submit-Tag wie zuvor, auch nach erneut gesendeten Sicherheitskorrekturen.Aktivieren Sie DMI mithilfe der Konstante

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

Sag Bescheid, wenn es nicht funktioniert hat.

Andere Tipps

Wenn jemand Struts 2.5 umzieht oder daran arbeitet, muss er keine Aktionen mit struts.xml zuordnen.Strtus 2.5 basiert auf Annotationen, sodass Entwickler in Aktionsklassen mithilfe von Annotationen mehrere Aktionen innerhalb einer einzelnen Klasse zuordnen können.

Möglicherweise ist dieser Link von alten Struts-Versionen bis zur Struts-Version 2.5 hilfreich.

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

Es folgt der einfache Democode.

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";
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top