Strisce:Posso precompilare un modulo, ma dopo l'invio il formBean è nullo

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

  •  13-09-2019
  •  | 
  •  

Domanda

Posso precompilare il mio modulo JSP Stripes con un oggetto, client nel mio caso, ma quando invio questo modulo, il mio oggetto viene restituito come null.

Ho creato un secondo oggetto "temp" di cui è un duplicato parallelo client e questo mantiene i suoi valori, quindi non riesco a vedere un problema nel passaggio di un oggetto nella richiesta

Il mio modulo è il seguente:

<s:form beanclass="com.jameselsey.salestracker.action.ViewClientAction">
            <s:hidden name="clientA" value="${actionBean.clientA}"/>
            <s:hidden name="clientId" value="${actionBean.clientId}"/>

            <table>
                <tr>
                    <td>Name : </td>
                    <td><s:text name="client.name"/></td>
                </tr>
                <tr>
                    <td>Sector : </td>
                    <td><s:text name="client.sector"/></td>
                </tr>
              <!-- omitted some attirbutes, not needed here -->
            </table>
        </s:form>

La mia azione assomiglia

public class ViewClientAction extends BaseAction
{

    @SpringBean
    ClientService clientService;// = new ClientService();
    private Integer clientId;
    private Client client;
    private Client clientA;

    public void setClient(Client client)
    {
        this.client = client;
    }
    public Integer getClientId()
    {
        return clientId;
    }

    public void setClientId(Integer clientId)
    {
        this.clientId = clientId;
    }

    public Client getClientA()
    {
        return clientA;
    }

    public void setClientA(Client clientA)
    {
        this.clientA = clientA;
    }



    public Client getClient()
    {
        return client;
    }

    @DefaultHandler
    public Resolution quickView()
    {
        clientA = clientService.getClientById(clientId);
        client = clientService.getClientById(clientId);
        return new ForwardResolution("/jsp/viewClientQuickView.jsp");
    }

    public Resolution save()
    {
        clientService.persistClient(client);
        return new ForwardResolution("/jsp/reports.jsp");
    }

    public Resolution viewClientInfo()
    {
        client = clientService.getClientById(clientId);
        return new ForwardResolution("/jsp/viewClientClientInfo.jsp");
    }
...

Se imposto un punto di interruzione su clientService.persistClient(client); posso capire che ClientA ha ancora tutti i valori originali dell'oggetto client è annullato.

Mi sono perso qualcosa che lega il form bean al file client oggetto nella mia azione?

Grazie

È stato utile?

Soluzione

Aggiungi questa riga nel tuo JSP:

    <s:hidden name="client" value="${actionBean.client}"/>

Altri suggerimenti

Ho fatto funzionare questo scenario aggiungendo un metodo @Before per reidratare l'oggetto nidificato.Successivamente, il salvataggio funziona correttamente

@Before(stages = LifecycleStage.BindingAndValidation)
public void rehydrate() {
   if (context.getRequest().getParameter("save")!=null){
       this.domainObject = getHibernateSession().load(DomainObject.class, context.getRequest().getParameter("id"));
   }
}

public void save(){
    Session session=getHibernateSession();
    session.update(domainObject);
    session.commit();
    //...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top