Pergunta

Eu tenho uma ação em 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>

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

com vários elementos de formulário, todos vinculados a uma ação.Cada formulário possui um botão de envio individual com um nome distinto method (por exemplo."shopPdfReprint").Cada method é mapeado para um método na classe correspondente.

Tudo está funcionando bem com o Struts 2.2.3.Mas após a migração para 2.3.1 o mapeamento de métodos não funciona.Em vez disso, chame o método correspondente (por exemplo"shopPdfReprint"), apenas o execute-método da classe é invocado.

Eu olhei para os documentos, mas infelizmente não encontrei pista, como se adaptar a 2.3.1 Alguém encontrou isso?Agradecemos ajuda:]

Foi útil?

Solução

Isso acontece porque você desativou o DMI.O method O atributo funciona com a tag submit como antes, mesmo depois de reenviar as correções de segurança.Habilite DMI usando a constante

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

deixe-me saber se não funcionou.

Outras dicas

Se alguém estiver migrando ou trabalhando no Struts 2.5, não precisará mapear ações usando struts.xml.Strtus 2.5 é baseado em anotação, portanto, na classe de ação, o desenvolvedor pode mapear várias ações em uma única classe usando anotação.

Este link pode ser útil desde versões antigas do struts até a versão 2.5 do struts.

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

A seguir está o código de demonstração simples.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top