Stripes: RedirectResolution; Come posso reindirizzare a specifici eventi azione?
Domanda
Ho un chicco di azione nella mia applicazione strisce. Il gestore predefinito / metodo verrà visualizzato un elenco di dati, un elenco di tutti i miei oggetti MarketResearch
Al mio JSP, posso fare clic su uno per visualizzarne i dettagli, questo mi porta a una diversa JSP con un modulo di pre-popolato in base al particolare oggetto MarketResearch
che è stato selezionato.
Ho un altro metodo sul mio fagiolo azione che viene mappato il save
pulsante di invio, questo prende in quella che è la forma modificata, e persiste. Dopo questo ha avuto luogo, voglio che reindirizzare indietro alla forma, piuttosto che all'azione lista (gestore predefinito), è possibile?
La mia azione è la seguente:
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;
}
}
E 'possibile? O sto avvicinando la situazione da un angolo di brutto e dovrebbe ri-factor?
Grazie
Soluzione
Sì. Si potrebbe restituire un RedirectResolution
al modulo jsp. Se hai difficoltà con i parametri, se li avete nel metodo save()
, si potrebbe fare in questo modo:
return new RedirectResolution("/theJsp.jsp")
.addParameter("one", one)
.addParameter("two", two)
.addParameter("three", three)
.flash(this);
Se non si hanno i params che sono stati passati al modulo, dovrete farli funzionare in qualche modo. Si potrebbe passare l'oggetto marketresearch attraverso il form in modo avresti lì.
<stripes:hidden name="marketResearch" value="${ActionBean.marketResearch}"/>
E aggiungere il requisito variabile di istanza / getter / setter sul MarketResearchActionBean
.