Newsgroup: it.comp.lang.javascript
Titolo: Netbean 6.01 e Javascript

Salve a tutti.
Sono alle primissime armi con Netbean e Javascript e quindi chiedo 
aiuto. Vorrei fare in modo che quando l'utente preme un pulsante esca 
una finestra che chiede la conferma. In base al tipo di risposta eseguo 
del codice.
Ho creato un pulsante al quale è associato la funzione elimina()
Nell' onClick di questo pulsante ho inserito il codice javascript
  a = confirm ("Messaggio)
  if (a)
    {
     // esegui comando 1
    }
else
{
    // esegui comando 2
}
Il problema è che non so come far passare il valore di a ( restituito da 
js)  al mio programma per poter fare le corretto operazioni.
Grazie per l'aiuto.
Arturo Mazzi

 js)  al mio programma per poter fare le corretto operazioni.
intanto c'e' un errore
a = confirm ("Messaggio)
diventa
a = confirm ("Messaggio");
a e' un valore booleano e quindi e' questo che valuti se l'utente ha 
cliccato su ok o annulla.
Chiaramente se hai altri parametri da passare puoi fare in modo che quando 
cliccano sul link / bottone che scatena la richiesta di confirm imposti dei 
parametri in dei campi hidden o delle variabili js.
quindi  qualcosa del tipo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
">
<html xmlns="
http://www.w3.org/1999/xhtml
">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento senza titolo</title>
<script language="javascript">
var variabile1="";
var variabile2=0;
function imposta(par1, par2){
    variabile1=par1;
    variabile2=par2;
}
function domanda(){
    a=confirm("vuoi ancora dei mafiosi criminali al governo ?");
    if(a){
    // esegui beccatiparlamentari() condannati a tutti i gradi di giudizio e 
in ogni sede processuale
 beccatiparlamentari(variabile1,variabile2);
    }
    else{
    resettaParlamento();
    }
}
function beccatiparlamentari(var1,var2){
 alert("lo sai si ti ciucciano i soldi del tuo lavoro "+ var2 +" " + var1 +" 
pregiudicati e condannati per mafia, camorra, banditismo, assassinio in 
questo momento ?") ;
}
function resettaParlamento(){
 alert("RESET !!!! \navviamo il conteggio alla rovescia per tornare a essere 
cittadini e non polli") ;
}
</script>
</head>
<body>
<a href="javascript:imposta('Deputati',70);domanda();">domanda</a>
</body>
</html>

> intanto c'e' un errore
Ok mi è rimasto nella tastiera per la fretta
Ho capito la logica ma il fatto è che con NB io non vedo il file HTML ma 
    il file java e jsp
Ricapitolo per maggior chiarezza
il pulsante "Button" ha due metodi che mi interessano in questo momento
onClick e action
onClick che (dall'help) "Click Script (String) scripting code execute 
when a nous click occurred on this component".
Per scrivere del codice mi si apre una finestra nella quale mi viene 
richiesto "enter one o more javascript expression". In questa finestra 
scrivo a = confirm ("messaggio") ecc.
questo js viene riportato automaticamente nel file js nel seguente modo
  <webuijsf:button 
actionExpression="#{protocollo$ProtoCerca.elimina_action}" 
binding="#{protocollo$ProtoCerca.elimina}"
                                         id="elimina"
                                         onClick="a = 
confirm(&quot;Questa operazione cancellerà gli articoli selezionatidal 
tuo carrello della spesa. Sei sicuro di voler 
procedere?&quot;);&#xd;&#xa;if (a) {&#xd;&#xa;document.writeln(&quot;Gli 
articoli sono stati cancellati!!&quot;);&#xd;&#xa;}&#xd;&#xa;else 
{&#xd;&#xa;document.writeln(&quot;L'operazione è stata 
annullata&quot;);&#xd;&#xa;}&#xd;&#xa);" text="Elimina"/>
  E qui sta il problema !!
A questo punto dovrei memorizzare il valore booleano di a in un campo 
nascosto del mio documento che ha la struttura
ProtoCerca
	Page1
            html1
              head1
              body1
                form1
                  oggetti della form compreso un field nascosto chiamato 
                                     tmp
ho cercato di assegnare a tmp il valore di a nel seguente modo
window.document.forms["form1"].tmp.value = a
ma non è successo niente e mi viene ricaricata la stessa pagina
Mi scuso per la lunghezza del messaggio  e per la mia ignoranza.
Grazie per l'aiuto.

 Mi scuso per la lunghezza del messaggio  e per la mia ignoranza.
non c'e' problema :-)
se qualcosa non ti e' chiaro chiedi pure.
ciao 

Siccome sono due giorni che cerco di documentarmi su questo maledetto 
problema rifaccio brevemente la storia.
Utilizzo NetBean 6.01 con il quale sto sviluppando una web Application 
che utiliza come frameworks Visual Web Javaserver Faces.
Ogni volta che creo un nuovo file ho ha disposizione l'IDE con tre Tab 
che mi consentono di acceder a Design , al file Jsp  o al file Java,
Quando trascino un nuovo bottone nel Design il file JSP viene aggiornato 
con una riga tipo
  <webuijsf:button 
actionExpression="#{protocollo$ProtoCerca.modifica_action}" 
binding="#{protocollo$ProtoCerca.modifica}"
                                         id="elimina" text="Elimina"/>
Nelle proprietà di questo pulsante ho i due metodi
onClick    che attiva l'eventuale  codice Javascript
action     che esegui i comandi Java previsti (Nel mio caso se l'on 
click Js restituisce True dovrei eliminare il record altrimenti non 
faccio nulla)
Accanto al metodo onClick c'e un pulsante che mi apre una finestra nella 
quale posso inserire uno o più statement Javascript. Infatti se in 
questa finestra scrivo
   risposta = confirm("Confermi l'eliminazione");
quando lancio il programma e premo il pulsante Elimina  esce la finestra 
con l'avviso che  si chiude quando scelgo OK o annulla. La variabile 
"riposta" contiene il valore booleano che mi dice quale pulsante ho 
premuto.
Dopo questa scelta il controllo del programma ritorna a java che 
continua con la funzione action. E' a questo punto che devo conoscere la 
scelta dell'utente (che avevo memorizzato nella variabile risposta ) per 
eseguire l'eventuale cancellazione del record.
Il mio problema è che della variabile risposta ho perso ogni traccia.
Ho provato a memorizzarla nella sessione con
   risposta = confirm("Confermi l'eliminazione");
   if (risposta)
     {
        session.setAttribute("risposta", "vero");
     }
   else
     {
           session.setAttribute("risposta", "false");
     }
ma quando cerca di richiamarla (all'interno della funzione action) con
  String mySessionValue = (String) getValue("#{sessionScope.risposta}");
ottengo un valore null.
Qualsiasi intervento sarà ben apprezzato.
Grazie di nuovo

 Grazie di nuovo
...prego di nuovo :-) 

 annullata&quot;);&#xd;&#xa;}&#xd;&#xa);" text="Elimina"/>
Sei consapevole che scrivere nel documento con document.write quando questo
e' gia' chiuso, come stai tentando di fare nel gestore di evento onclick,
cancella il contenuto corrente del documento?
-- 
Dicono che la vita sia nata dal mare. Ascoltare quindi
il suono della risacca sulla riva del mare deve essere
come sentire la ninna nanna della nostra antica madre.

 Dopo questa scelta il controllo del programma ritorna a java
[cut]
non fa mai male mettere in chiaro alcune cose, mi scuso se sono per te
ovvie:
- java non fa altro che interpretare i tag personalizzati per produrre un
testo statico (codice HTML) che viene inviato al client.
- il codice HTML una volta sul computer del client con l'applicazione web
lato server non ha modo di dialogare[*] finche' non effettui una successiva
richiesta o invii un modulo; dal momento che JSF gestisce il dialogo con il
client attraverso on un mega-form inviato con metodo POST, per inviare un
valore al server non puoi che valorizzare un campo di tale form
Ti consiglio pertanto di aggiungere un campo hidden (inputHidden) al form
dal tuo editor, vedere quale nome gli viene assegnato (JSF gestisce i campi
con dei nomi particolari) e solo allora saprai come referenziare quel campo
da javascript all'interno del gestore onclick.
Ad esempio, a me viene generato questo elemento:
<input type="hidden" name="j_id_jsp_1159202426_2:j_id_jsp_1159202426_9"
value="foo" />
Nel gestore javascript scrivero' dunque:
this.form.elements['j_id_jsp_1159202426_2:j_id_jsp_1159202426_9'].value =
confirm('Vuoi davvero?')
JSF bravo bravo generera' il seguente HTML:
<input type="submit" name="j_id_jsp_1159202426_2:j_id_jsp_1159202426_6"
value="Cancella"
onclick="this.form.elements['j_id_jsp_1159202426_2:j_id_jsp_1159202426_9'].value
= confirm('Vuoi davvero?')" />
[*] escludendo richieste asincrone AJAX e similari.


Ringrazio tutti per le risposte anche se non sono riuscito ad inquadrale 
bene per colpa della mia ignoranza in materia.
Vorrei fare una premessa.
Forse avrete capito che sono un novellino, anzi novellinissimo della
programmazione Java e delle problematiche server/client web avendo
finora sviluppato, come autodidatta, solo sw che girava su rete locale.
Sono alle prese ora con questo programma ( un programma gestionale che 
cerco di sviluppare per una associazione senza fini di lucro).
Inoltre sono un pensionato, e quindi ho una certa età e nella vita ho 
fatto tuttaltro. Mi piace , tuttavia, programmare e quindi ho aderito 
volentieri a questa richiesta pervenitami dall'associazione.
Detto questo veniamo a noi.
Ho (almeno spero) ora le idee un pò piu chiare di quando si opera lato 
server e quando lato client.
Vediamo se ho capito.
Quando apro la form principale ( contenente i campi che aggiorneranno il 
DB), provvedo ad inserire i dati e li invio (tramite un pulsante) al 
server che aggiornerà il DB. E quoeta parte funziona
Per la cancellazione del record avviene qualche cosa di differente
Premo il pulsante di cancellazione che, però, prima di inviare la 
richiesta al server per l'effettiva cancellazione, attiva (lato client) 
   il javascript con in quale si chiede la conferma
risp = confirm("Sicuro ")   ( JS)
A questo punto devo fare in modo di inviare al server,sempre tramite Js, 
la variabile risp in modo che il server la memorizzi nella sua sessione
o in un campo nascosto
Javascript dovrebbe ora aver terminato il suo compito e dovrebbe cedere 
il controllo del programma a java
Java recupera il valore di risp memorizzato sul server o nel campo 
nascosto e, in base al valore della variabile, decide se cancellare 
effettivamente il record oppure no .
Se (questa logica è corretta)
allora devo trovare il modo di restituire al server il valore
altrimenti
  ( chiudo tutto e rinuncio)
Seguendo l'esempio che mi era stato proposto da mastro delphine, quando 
inserisco nella form un campo hidden (Ricordo che utilizzo Netbean con 
Web Server Faces) viene generato nel file JSP il seguente codice
<webuijsf:hiddenField id="hiddenField1"/>
ho provato a modificarlo  in
<webuijsf:hiddenField id="hiddenField1" name ="mionome"/>
ma le uniche proprietà che accetta sono ;
      binding
      HtmlTemplate
      text
      validator exspression
      valueChangeListenerExspression
a questo punto nuono di nuovo bloccato e quindi penso che l'eliminazione 
di un record avverrà senza chiedere la conferma.
Grazie di nuovo a tutti.


Ti è chiaro che Java e Javascript sono 2 linguaggi diversi?
http://it.wikipedia.org/wiki/JavaScript
Leonardo

 Ti è chiaro che Java e Javascript sono 2 linguaggi diversi?
Si ma nel mio caso Javascripr ( che viene eseguito sul client) mi serve 
solo per aprire
la finestra di conferma e memorizzare sul server il valore della scelta. 
Poi con Java opererò sul server.

Ciao Amazzo
e complimenti per l'impresa.
Mettersi a programmare una applicazione client server in eta' pensionabile e 
con Java e' solo indice di grande coraggio e forza d'animo !
:-)
allora, sembra che ora ti sia chiaro i due tempi dell'elaborazione.
Solo che credo a questo punto che il tuo unico problema sia quella rogna di 
Netbeans che non ti fa agire direttamente sul codice.
Non c'e' modo di scrivere quella pagina che stai progettando e che contiene 
il confirm di farla a mano con il notepad ?
Capisco gli ambienti integrati e compagnia bella ma talvolta bisogna 
rimboccarsi le maniche e agire direttamente sul codice senza mediazione.
un saluto 

Caro Rataplan,
l'ambiente integrato mi è stato consigliato da una persona più esperta 
di me ed in, effetti, sono riuscito a costruire in breve tempo una 
applicazione (consistente essenzialmente in form per 
l'inserimento/modifica/cancellazione) di record memorizzati su un DB 
Mysql. Mi restava solo questo piccolo problema della richiesta di 
conferma prima della cancellazione di un record.
Da un new group di netbean ho ricevuto un esempio che funziona ma non 
capisco come lo posso adattare alla mia applicazione.
L'ambiente integrato non mi consente di sapere che cosa avviene 
effettivamente e questo è un mio grande cruccio perchè non ho la 
consapevolezza di che cosa fare in casi come questo.
Come soluzione pensavo di richiamare con una nuova pagina html nella 
quale memorizzare in qualche modo  una variabile per continuare 
l'elaborazione in base a questa variabile.
Purtroppo ho ancora le idee confuse sugli effettivi meccanismi di 
scambio fra client e server.
Poichè sono molto tenace, penso di riuscire prima o dopo a risolvere il 
problema.
Un saluti.