Listras :RedirectResolução;Como posso redirecionar para um evento de ação específico?

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

  •  23-09-2019
  •  | 
  •  

Pergunta

Eu tenho um action bean em meu aplicativo de listras.O manipulador/método padrão exibirá uma lista de dados, uma lista de todos os meus MarketResearch objetos

No meu JSP, posso clicar em um para visualizar seus detalhes, isso me leva a um JSP diferente com um formulário pré-preenchido com base no determinado MarketResearch objeto que você selecionou.

Eu tenho outro método no meu bean de ação que está mapeado para o save botão enviar, ele recebe o que está no formulário alterado e persiste.Depois que isso acontecer, quero redirecionar de volta para o formulário, em vez de para a ação de listagem (manipulador padrão).

Minha ação é a seguinte:

public class MarketResearchAction extends BaseAction
{

    @SpringBean
    ClientService clientService;
    private static final String VIEW = "/jsp/marketResearch.jsp";
    private Client client;
    private Client clientBeforeChanges;


    public Client getClient()
    {
        return client;
    }

    public void setClient(Client client)
    {
        this.client = client;
    }

    @DefaultHandler
    public Resolution viewAll()
    {
        return new ForwardResolution(VIEW);
    }

    public Resolution viewClientMarketResearch()
    {
        if (client.getSector().equals("Education"))
        {
            return new ForwardResolution("/jsp/marketResearchEducation.jsp");
        } else if (client.getSector().equals("Local Government"))
        {
            return new ForwardResolution("/jsp/marketResearchLocalGovernment.jsp");
        } else if (client.getSector().equals("Housing Association"))
        {
            return new ForwardResolution("/jsp/marketResearchHousing.jsp");
        }
        return new ForwardResolution("/jsp/viewClientMarketResearch.jsp");
    }

    public Resolution save()
    {
        clientBeforeChanges = clientService.getClientById(client.getId());
        clientService.persistClient(client);
        getContext().getMessages().add(new SimpleMessage("{0} updated", client.getName()));
        return new RedirectResolution("/MarketResearch.action").flash(this);
    }

    public Client getClientBeforeChanges()
    {
        return clientBeforeChanges;
    }

    public void setClientBeforeChanges(Client clientBeforeChanges)
    {
        this.clientBeforeChanges = clientBeforeChanges;
    }

    public ClientService getClientService()
    {
        return clientService;
    }

    public void setClientService(ClientService clientService)
    {
        this.clientService = clientService;
    }


}

É possível?Ou estou abordando a situação de um ângulo ruim e deveria refatorar?

Obrigado

Foi útil?

Solução

Sim.Você poderia devolver um RedirectResolution para o formato jsp.Se você estiver tendo dificuldades com os parâmetros, se os tiver no save() método, você poderia fazer assim:

return new RedirectResolution("/theJsp.jsp")
    .addParameter("one", one)
    .addParameter("two", two)
    .addParameter("three", three)
    .flash(this);

Se você não possui os parâmetros que foram passados ​​para o formulário, você terá que mantê-los funcionando de alguma forma.Você poderia passar o objeto MarketResearch pelo formulário para tê-lo lá.

<stripes:hidden name="marketResearch"  value="${ActionBean.marketResearch}"/> 

E adicione a variável de instância/getter/setter necessária em seu MarketResearchActionBean.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top