Stripes: RedirectResolution; Comment puis-je rediriger à l'événement d'action spécifique?
Question
J'ai un haricot d'action dans ma demande de rayures. Le gestionnaire par défaut / méthode affiche une liste de données, une liste de tous mes objets MarketResearch
Sur mon JSP, je peux cliquer sur l'un pour afficher les détails, cela me prend à un autre JSP avec une forme pré-remplie en fonction de l'objet particulier de MarketResearch
que vous avez sélectionné.
J'ai une autre méthode sur mon haricot d'action qui est mis en correspondance avec le bouton soumettre save
, cela prend dans ce qui est la forme modifiée, et il persiste. Après cela a eu lieu, je veux qu'il rediriger à la forme, plutôt que de l'action liste (gestionnaire par défaut), est-ce possible?
Mon action se présente comme suit:
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;
}
}
Est-il possible? Ou suis-je aborder la situation d'un mauvais angle et devrait re-facteur?
Merci
La solution
Oui. Vous pouvez retourner un RedirectResolution
à la forme jsp. Si vous éprouvez des difficultés avec les paramètres, si vous les avez dans la méthode save()
, vous pouvez le faire comme ceci:
return new RedirectResolution("/theJsp.jsp")
.addParameter("one", one)
.addParameter("two", two)
.addParameter("three", three)
.flash(this);
Si vous n'avez pas les params qui ont été transmis à la forme, vous devrez les maintenir en quelque sorte. Vous pouvez passer l'objet MarketResearch par la forme que vous auriez là.
<stripes:hidden name="marketResearch" value="${ActionBean.marketResearch}"/>
Et ajoutez la variable d'instance requise / getter / setter sur votre MarketResearchActionBean
.