|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
[JSP] Mi servirebbe un trucchetto per...
Ok, dunque, ho una paginetta jsp con 6 checkbox, corrispondenti ai giorni della settimana da lunedi a sabato.
quando clicko sulle checkbox sto ad indicare che seleziono i relativi giorni della settimana. Per confermare questi giorni ho un bottone di tipo "Salva" che mi rimanda ad un jsp "di servizio", con solamente del codice java, che mi fa certe cose su questi giorni selezionati io i giorni li ottengo con il metodo request.getParameterValues("nomeDelGruppoDiCheckbox"); e mi restituisce un array di stringhe contenente solo i nomi dei giorni selezionati La domanda: C'è un modo per farmi restituire un array con tutti i giorni, selezionati e non? Esempio, seleziono i giorni lunedi e mercoledi. Vorrei farmi restituire dalla pagina un array del tipo "Lunedi", "niente", "Mercoledi", "niente", "niente", "niente". Mi rsparmierebbe molto lavoro. Spero di essere stato sufficientemente chiaro
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
O forse puoi cambiare la form in modo che anziché restituirti i valori "Lunedì", "Martedi"...ti restituisca valori tipo 1, 2, 3 che poi usi come indice su un array in cui hai i nomi di tutti i giorni....questo ti semplificherebbe le cose? |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Aug 2004
Città: Salento
Messaggi: 1080
|
Quote:
Mi aggiungo alla discussione... Mi puoi dire il codice per ottenere solo il valore delle checkbox selezionate? Io non so dove sbaglio, ma ottengo il valore di tutte le checkbox |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
[quote=BlueDragon]Se vuoi necessariamente un array così, potresti mettere nelle prima pagina un javascript per cui quando premi "Salva", ti seleziona automaticamente tutti i checkbox, cambia i valori di quelli che non erano già selezionati a "niente" e poi invia la pagina.
Questa mi potrebbe piacere, riusciresti a postare un po di codice? SOno a digiuno di javascript. Quote:
Meglio la prima Grazie Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
Quote:
Scusa, ho fatto casino con i quote. Cmq, la prima soluzione è l'ideale, riusciresti a postare un po di codice per favore? Grazie Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
Quote:
<input type="checkbox" name="daysOfWeek" value="lunedi"/> <input type="checkbox" name="daysOfWeek" value="martedi"/> <input type="checkbox" name="daysOfWeek" value="mercoledi"/> così per tutti e sei. Chiaramente devono essere racchiusi da un tag <form> e </form> che li mandi ad una qualche pagina. In questa pagina io metto qualcosa del tipo String daysOfWeek[]=new String[7]; daysOfWeek = request.getParameterValues("daysOfWeek"); e voilà, l'array magicamente si riempie. NOTA: il parametro name di ogni checkbox deve essere UGUALE per ognuno dei checkbox della settimana Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
@DigitalKiller:
Quote:
Esempio: Codice della form Codice:
<form action="test.jsp" method="get">
<input type="checkbox" name="giorniScelti" value="1">Lunedi<br>
<input type="checkbox" name="giorniScelti" value="2">Martedi<br>
<input type="checkbox" name="giorniScelti" value="3">Mercoledi<br>
<input name="invio" type="submit">
</form>
Codice:
String[] giorniSelezionati = request.getParameterValues("giorniScelti");
EDIT: Mentre ero al telefono "qualcuno" ha postato prima di me |
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
Cmq: Codice:
function validaForm() {
with (document.MiaForm) {
for (var i=0; i < elements.length; i++) {
if (elements[i].type == 'checkbox' && elements[i].name == 'giorniScelti')
{
if (!elements[i].checked)
{
elements[i].checked = true;
elements[i].value = "niente";
}
}
}
}
}
Metti un "onSubmit" per invocare il Javascript quando spedisci la tua form ed il gioco è fatto. Il codice è quasi tutto preso da qui: http://www.html.it/mailing/archivio/a284/ (A Cesare quel che è di Cesare!) HTML.it è sempre un'ottima fonte in questi casi |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
@DigitalKiller:
Ho letto ora la discussione... Quando crei le righe dei record, dai a tutti checkbox lo stesso name, e come value, il valore del loro id. Es: Codice:
<input type="checkbox" name="righeScelte" value="<%=id%>"> String[] idScelti = request.getParameterValues("righeScelte"); che automaticamente ti mette tutti gli id scelti in un array di Stringhe. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
Quote:
Poi, non capisco certe cose nel tuo codice: 1) if (elements[i].type == 'checkbox' && elements[i].name == 'giorniScelti') il nome elements[i].name è per forza SEMPRE "giorniscelti" dato che ad ogni checkbox assegno io lo stesso nome, giusto? O sto sbagliando concettualmente? 2) perchè se l'elemento non è selezionato (come tu scrivicon questo codice if (!elements[i].checked) ) con l'istruzione dopo selezioni tu manualmente l'elemento? 3) io aggiungerei un ramo else all'if in cui scriverei element[i] = "qui ci va il value del ceckbox attualmente in esame", in modo da avere un array con il nome dei giorni selezionati e un "niente" negli altri 4) come faccio a spedire questo array al jsp che si occuperaà di farci i suoi calcoli sopra? Grazie tantissime ancora e scusami se ho frainteso la tua soluzione Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#12 | ||||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Ti rispondo domanda per domanda..
Quote:
Ad esempio, quando tu fai elements[i].checked = true è come se l'utente stesso avesse selezionato il box...infatti vedrai che subito prima che la pagina scompaia per essere inviata, i checkbox vengono coperti tutti dai "tick" Quote:
Quote:
Quelli che però sono stati selezionati dal javascript (e quindi non erano voluti dall'utente) avranno value = "niente" Quote:
|
||||
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
Quote:
Grazie, sei stato estremamente chiaro. Ora ti chiedo: Perchè dici che quest non è una soluzione elegante? Sai che per ottenere l'array che mi potrei ricavare nel modo che mi hai suggerito ci ho messo 4 ore e 500 righe di codice andando a considerare TUTTI i casi possibili dei giorni della settimana selezionati e non? Secondo me è molto meno elegante quel modo di costruirsi l'array piuttosto che quello che mi hai appena suggerito. Ora resta da provare se funziona. Graizie ancora Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
Proviamo qualche soluzione alternativa: Immaginiamo, come base di partenza, che la pagina ti restituisca un'array con gli ID dei giorni della settimana (che a me sembra più comodo)... Se vogliamo un'array di 7 stringhe che contenga i nomi per quelli selezionati e null per gli altri: Codice:
String[] idSelezionati = request.getParameterValues("giorniSelezionati");
String[] giorniSettimana =
{"Lunedi","Martedi","Mercoledi","Giovedi","Venerdi","Sabato","Domenica"};
String[] giorniSelezionati;
for (int x = 0; x < idSelezionati.length;x++)
{
giorniSelezionati[Integer.parseInt(idSelezionati[x])] = giorniSettimana[x];
}
Codice:
String[] idSelezionati = request.getParameterValues("giorniSelezionati");
boolean[] giorniSelezionati = {false,false,false,false,false,false,false};
for (int x = 0; x < idSelezionati.length;x++)
{
giorniSelezionati[Integer.parseInt(idSelezionati[x])] = true;
}
Oppure ci facciamo restituire i nomi dei giorni dalla form...e poi ce li mettiamo comodi comodi in un Vector..o in un HashSet se siamo preoccupati di possibili doppioni.. o comunque in una bella Collection così abbiamo il metodo contains(Object o) Codice:
String[] giorniSelezionati = request.getParameterValues("giorniSelezionati");
HashSet giorniScelti = new HashSet();
for (int x = 0; x < giorniSelezionati.length;x++)
{
giorniScelti.add(giorniSelezionati[x]);
}
// E' stato scelto il venerdì?
if (giorniScelti.contains("Venerdì"))
{
.............
}
|
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Feb 2003
Città: Cavezzo (MO)
Messaggi: 1928
|
Quote:
Tutto ciò mi fa riflettere su due cose: 1) in giro c'è gente che ne sa a pacchi, e te sei una di queste 2) sono un coglione, perchè, COME AL SOLITO, ho la soluzione davanti agli occhi e non la vedo. Ho implementato quanto mi hai suggerito e funziona tutto che è una meraviglia, non so come ringraziarti. Ora ho tutta una serie di problemi collaterali al fatto che devo cambiare diverse cose all'interno del mio codice, perchè il tutto si basava sulla mia soluzione decisamente sbagliata. Torno ad armarmi di tanta pazienza e ripeterò le procedure Se sei dalle parti di modena di offro una birra + che volentieri Grazie davvero tante Davide
__________________
Case: NZXT Phantom 820 White Ali: Seagate PRIME-TX-1300 TITANIUM CPU: Ryzen 7 5800X3D Dissi: CORSAIR Hidro H150i PRO XT MB: ASUS X570-F Strix RAM: 4x16GB CORSAIR VENGEANCE 3600 CL16 Video: MSI RTX 4080 Suprim X Cuffie: Audio-Technica ADG1X HD: Sabrent M.2 PCIe 4 512GB - 1 TB Sabrent M.2 - Seagate Barracuda 2TB Monitor1: LG 27GP850-B Monitor2: ASUS VG279QM Mouse: Razer Deathadder V2 Tastiera: Corsair K70 RGP PRO UPS: APC Smart-UPS 1000 VA SMT1000I |
|
|
|
|
|
|
#16 | |||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
Capita di "perdere" tempo di fronte ad un problema quando invece la soluzione è a portata di mano cambiando anche solo di poco il punto vista.... E' per questo che è conveniente avere qualcun altro con un cui discutere di un problema e/o avere la capacità di fare un passo indietro e cambiare angolazione quando ci si trova bloccati. Quote:
Quote:
Se trovo una birra che mi piace e passo da Modena, ti faccio sapere |
|||
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:39.



















