Salve,
sto sviluppando un applicazione web, ora stavo provando a fare in modo che l'admin deve confermare i dati prima di inserirli.
Ho fatto così:
struts-conf.xml
La prima action inizializza il bean, la seconda mette i dati che ha inserito l'admin nel bean e attravarso i tiles rimanda il tutto ad una jsp che stampa i dati appena inseriti e chiede la conferma, la terza inserisci i dati nel db. Alla seconda action c'è il primo problema, come richiamo la inserisciQuestionario?codice:<action path="/admin/initCreaQuestionario" roles="Admin" name="creaQuestionario" scope="session" type=" it.enginsoft.qo.struts.admin.QuestionarioInizializza" > <forward name="ok" path="mostraCreaQuestionario"/> <forward name="ko" path="erroreInterno"/> </action> <action path="/admin/creaQuestionario" roles="Admin" name="creaQuestionario" scope="session" type=" it.enginsoft.qo.struts.admin.QuestionarioCrea" input="mostraCreaQuestionario" parameter="controllo_lingue"> <forward name="ok" path="mostraInserimentoQuestionario" /> <forward name="ko" path="erroreInterno"/> </action> <action path="/admin/inserisciQuestionario" roles="Admin" name="creaQuestionario" scope="session" type="it.enginsoft.qo.struts.admin.QuestionarioInserisci "> <forward name="ok" path="mostraInserimentoOk"/> <forward name="ko" path="erroreInterno"/> </action>
ho provato tramite un link <a href="...inserisciQuestionario.do> inserisci </a> ma non funziona (perde il bean per strada, cioè i campi inseriti da creaQuestionario sono vuoti). Ho provato a fare un form vuoto e fare in modo che alla pressione del pulsante venga chiamata inserisciQuestionario come action ma ho lo stesso la perdita dei dati del bean.
come posso fare? è come se richiamando mostraInserisciQuestionario (definita nei tiles) perdesse il bean o tutto quello che ho salvato l'ultima volta.
idee?
per informazione, queste sono le action:
Inizializza
crea:codice:Logger logger = Logger.getLogger(this.getClass().getName()); SqlMapSingleton sqlMap = new SqlMapSingleton(); CreaQuestionario que = (CreaQuestionario)form; que.reset(mapping,request); List lingue = sqlMap.getSqlMap().queryForList("get_Lingue"); que.setLingue_possibili(lingue); return mapping.findForward(OK);
Inserisci:codice:Logger logger = Logger.getLogger(this.getClass().getName()); SqlMapSingleton sqlMap = new SqlMapSingleton(); CreaQuestionario que = (CreaQuestionario)form; List titoli = new ArrayList(); List lingue = new ArrayList(); Testo t = null; if (que!=null){ String d[]=que.getDati(); //per tutte le lingue possibili //inserisco titolo e lingua scelti for (int i=0;i<que.getLingue_possibili().size();i++){ //se è stato checcato il flag if (d[i]!=null && d[i].trim()!=""){ lingue.add(que.getLingue_possibili().get(i)); t = new Testo(d[i],(Questionario_lingua)que.getLingue_possibili().get(i)); titoli.add(t); } } que.setLingue(lingue); que.setTitoli(titoli); return mapping.findForward(OK); } else return mapping.findForward(KO); }
il size di titoli preso da que nel seconda action è 2, nella 3° è 0. è come se richiamando l'action dalla jsp venisse azzerato il vettore.codice://inserisco il questionario try{ sqlMap.getSqlMap().startTransaction(); String indice = (String)sqlMap.getSqlMap().queryForObject("get_Max_Questionario"); que.setIndice(Integer.parseInt(indice)+1); logger.debug("indice: " + que.getIndice()); sqlMap.getSqlMap().insert("insert_Questionario",que); //inserisco tutti i titoli logger.debug(""+que.getTitoli().size()); for (int i=0;i<que.getTitoli().size();i++){ Testo titolo = (Testo)que.getTitoli().get(i); ArgQueryInt aqi = new ArgQueryInt(); aqi.setArg0(que.getIndice()); aqi.setArg1(Integer.parseInt(titolo.getLingua().getId_lingua())); aqi.setArgS(titolo.getTesto()); sqlMap.getSqlMap().insert("insert_Questionario_testo",aqi); logger.debug("testo " + titolo.getTesto()); } sqlMap.getSqlMap().commitTransaction(); return mapping.findForward(OK); } finally { SqlMapSingleton.getSqlMap().endTransaction(); }
idee?
ciao

Rispondi quotando