Listras :RedirectResolução;Como posso redirecionar para um evento de ação específico?
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
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
.