Salve a tutti, ho un problema con questo TLD quando eseguo un refresh della pagina a seguito di un submit legato ad un altro oggetto.
Comincio con il codice:
Ho un Bean molto semplice:
public class MioBeanDTO
{
private String elementiSelezionati = null;
// Metodi getter e setter della variabile
}
Questo bean viene impostato nel form nel metodo "doAdd" della mia action insieme alla Map dei valori iniziali
/**
*
*/
public ActionForward doAdd(
ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception
{
....
....
// Dichiarazione Map
Map testMap = new HashMap();
testMap.put("1","Test-1");
testMap.put("2","Test-2");
testMap.put("3","Test-3");
// Map valori
request.getSession().setAttribute("MIA_MAP", testMap);
// Mio Bean
myForm.describe(new MioBeanDTO());
}
nella mia jsp uso il tutto
<label for="myInputField"><bean:message key="label"/></label>
<input type="text" id="item" name="item"/>
<div>
<cmdpanel:button
id="addItem"
img="toright.gif"
bundle="adminResources"
titleKey="tooltip1"
onclick="doAddItem('item', 'elencoDinamco')"/>
</div>
<html:select property="value(MioBeanDTO_elementiSelezionati )"
styleId="elencoDinamco"
size="5"
multiple="true">
<htmlptions collection="MIA_MAP" property="key" labelProperty="value"/>
</html:select>
il metodo legato allo "onclick" è gestito in jquery ed è il seguente
<script type="text/javascript">
$(document).ready(function(){
doAddItem=function(inputId, selectId){
if ($("#"+inputId).val().length<=0) return false;
if ($("#"+selectId).containsOptionText($("#"+inputId) .val())){
alert("elemento '"+$("#"+inputId).val()+"' gia' presente nella lista !");
return false;
}
var keyOption=1;foundNew=false;
while(!foundNew){
foundNew=!$("#"+selectId).containsOption(""+keyOpt ion);
if (!foundNew){
keyOption++;
}
}
$("#"+selectId).addOption(keyOption, $("#"+inputId).val(), false);
$("#"+inputId).val("");
}
});
</script>
Cosa succede, quando c'è un refresh della pagina a seguito di un SUBMIT scatenato da un altro componente, i valori inseriti dinamicamente nella html:select si perdono, e anche se provo a fare un submit per salvare i valori immessi in tutta la pagina, quelli della select non ci sono.
Ho provato a mettere dei breakpoint ed in effetti in fase di submit il metodo setter della variabile "elementiSelezionati" non viene chiamato.
Dove sbaglio? C'è un altro metodo per fare una lista che viene riempita a runtime??