Domanda

Ho un'azione 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>
.

A 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 diversi elementi di forma, tutti legati a un'unica azione. Ogni forma ha un singolo pulsante di sommario con un distinto method (ad esempio "Shoppdfreprint"). Ogni method viene mappato a un metodo nella classe corrispondente.

Tutto funziona bene con i montanti 2.2.3.Ma dopo la migrazione a 2.3.1 la mappatura del metodo non funziona.Invece di chiamare il metodo corrispondente (ad es. "Shoppdfreprint"), viene invocato solo il metodo execute della classe.

Ho guardato i documenti, ma sfortunatamente non ha trovato idea, come adattarsi a 2.3.1 Qualcuno correva in questo?L'aiuto è apprezzato:]

È stato utile?

Soluzione

Questo succede perché hai disattivato DMI.L'attributo method funziona con il tag di invio come prima anche dopo le correzioni di sicurezza risenti.Abilita DMI usando la costante

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

Fammi sapere se non funzionasse.

Altri suggerimenti

Se qualcuno si muove o si sta lavorando su struts 2.5, non devono mappare azioni usando struts.xml. Strtus 2.5 è in base alla base di Azione, è possibile mappare più azioni all'interno in una singola classe utilizzando l'annotazione.

Può essere questo collegamento utile da vecchie versioni di struts a Struts 2.5 Versione.

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

Di seguito è riportato il codice demo semplice.

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";
    }
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top