2009-04-24 12 views
8

Ho la seguente domanda: Ho bisogno di passare un parametro (ad esempio ID) quando ho finito un modulo e l'azione salva i valori del modulo, questo inoltrerà al risultato = "successo" e ho bisogno che l'azione che verrà chiamata nel successo venga con l'ID e altri parametri da utilizzare successivamente nel modulo seguente per salvare queste informazioni (info-form2 e info.form1) ...Struts 2: parametri tra le azioni

per esempio:

FORM1 (USER) ==== "successo" ====> FORM2 (INDIRIZZO)

userForm.html ===================> addressForm.html? User_id = X ... (dove X: Id ha passato il lancio di UserAction (metodo: salva) a AddressAction (metodo: newAddress))

prega io apprezzo il vostro aiuto

Grazie in anticipo

risposta

29

Hai usato la parola "avanti" ma sembra che tu voglia andare a una nuova pagina (indirizzo.html) per raccogliere ulteriori informazioni sull'indirizzo. Se questo è il caso, è necessario reindirizzare alla pagina dell'indirizzo dopo che l'azione dell'utente è stata completata.

<action name="user" class="UserAction"> 
    <!-- Redirect to another namespace --> 
    <!-- for Struts 2.2 --> <result type="redirectAction"> 
    <!-- for Struts 2.0 <result type="redirect-action"> --> 
    <param name="actionName">collect-address</param> 
    <param name="userId">${userId}</param> 
    </result> 
</action> 

La sintassi {} userId $ chiamerà GetUserID sul tuo UserAction e passare tale parametro come hai mostrato nella tua domanda:? AddressForm.html user_id = X. l'indirizzo di raccolta può avere un risultato positivo che va a addressForm.html. Docs here. Se si desidera evitare l'uso di un'altra azione, è possibile provare using the result type="redirect" e passare le cose in questo modo.

Se si desidera inoltrare realmente, è possibile utilizzare action chaining. Questo è discouraged by Ted Husted on the Struts2 team ma potrebbe funzionare per te.

Invece di concatenare azioni, provare a portare tutto il codice per completare questa richiesta in un'unica azione e utilizzare helper o classi di servizio per Utente e Indirizzo per separare e riutilizzare il codice anziché "concatenazione di azioni".

+0

Barett, provo la vostra soluzione come che cerco nei libri e le specifiche puntoni e Non ho successo ... nella forma .. quando premo INVIO .. l'utente viene salvato con il metodo ("salva" di azione: UserAction), e ho messo this.id = user.getId(); prima del "SUCCESSO" e le stesse frasi come hai messo sopra e nella prossima azione il param id appare vuoto o quando metto request.getParameter ("id") viene nullo ....:(hai qualche approccio al mio problema? ... apprezzerò troppo ... –

+0

... altro pensiero per il mio problema è: sto ottenendo il valore id più tardi di salvare l'oggetto USER ... questo id viene generato dalla sospensione all'oggetto e in seguito questo oggetto avrà l'id generato .... ma ho bisogno di questo ID generato per passare all'altra azione ... ma sembra che l'ID non sia generato mentre il metodo SAVE è in esecuzione .... : S ... qualsiasi aiuto sarò felice! –

+0

Ho lo stesso problema .. appare vuoto o nullo quando provo a passare la variabile in questo modo .. se, invece, provo 1111 quindi funziona – periback2

3
Non

molto chiaro che cosa si vuole fare.

Sembra che dopo l'esecuzione corretta di un'azione, la richiesta venga inoltrata a un'altra azione. Nella prima azione si desidera passare l'ID del parametro e utilizzarlo nella seconda azione. Poiché entrambe le azioni vengono utilizzate nella stessa richiesta, è possibile salvare il parametro ID in una richiesta come questa

request.setAttribute ("ID", iDValueObject);

Nella seconda azione è possibile estrarre il valore di ID come questo

request.getAttribute ("ID");

+2

Se stai usando Struts2, si dovrebbe cercare di implementare il ParameterAware e usarlo: D –

0

Questo dovrebbe funzionare:

<!-- Package Default --> 
    <package name="**default**" extends="struts-default,json-default" namespace="/"> 
     <action name="noOp" class="com.web.myapp.action.NoOpAction"> 
      <result name="success" type="chain"> 
        <param name="requiresValidation">true</param> 
        <param name="actionName">userAuthentication</param> 
        <param name="namespace">/user</param> 
      </result> 
     </action> 
    </package> 
    <!-- Package User --> 
    <package name="user" extends="struts-default,json-default" namespace="/user"> 
    <action name="userAuthentication" class="com.web.myapp.action.AuthenticateAction"> 
    ... 
    </action> 
Problemi correlati