Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Paassare un array java ad una funzione javascript

    Salve,
    sto cercando di trovare un modo semplice per poter passare un array di stringe in java ad una funzione javascript.....
    Ho provato il seguente codice , ma non funziona

    codice:
    <html>
    
    <head>
    <script> 
    
    //la funzione permette di nascondere il contenuto di un box 
    function azione(nomebox,flag,nomi[]) { 
       for (var i=0; i<3; i++) {
         document.write(nomi[i] + "
    ");
    
    }
    
    </script> 
    
    </head>
    
    <body>
           <% String parole[]={"Paola","Massimo","Carmela"}; %>
           
        <script type="text/javascript"> azione('nomediv',<%=true%>,<%=parole%>); </script> 
    
    </body>
    
    </html>
    Qualcuno lo ha gia' risolto?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Paassare un array java ad una funzione javascript

    Originariamente inviato da Mitele
    Ho provato il seguente codice , ma non funziona

    codice:
           <% String parole[]={"Paola","Massimo","Carmela"}; %>
           
        <script type="text/javascript"> azione('nomediv',<%=true%>,<%=parole%>); </script>
    No, infatti non funziona. Dovresti capire il concetto in generale. Non puoi semplicemente mandare in output l'array con una expression <%=parole%> perché verrebbe mandato in output il risultato del toString() sull'array, che è un qualcosa del tipo "[Ljava.lang.String;@3e25a5", quindi totalmente insignificante per quello che vuoi fare.

    Stai mandando in output una pagina HTML e hai la facoltà con JSP di generare "dinamicamente" parti della pagina. Quindi se vuoi fare qualcosa di "dinamico" anche nella parte Javascript, allora devi mandare in output un pezzo di testo che rappresenti del codice Javascript con sintassi corretta.

    Se il codice Java è:

    String[] parole = { "Paola", "Massimo", "Carmela" };

    potresti far generare un testo del genere che è la sintassi corretta Javascript per un array literal:

    codice:
    var parole = [ "Paola", "Massimo", "Carmela" ];
    Il punto è che gli apici " devi generarli tu, idem le virgole in mezzo alle stringhe.

    Con un blocco intero di scriptlet si potrebbe fare (giusto per darti una idea):

    codice:
    <%
    String[] parole = { "Paola", "Massimo", "Carmela" };
    
    out.print("var parole = [ ");
    
    for (int i = 0; i < parole.length; i++) {
        if (i > 0) {
            out.print(", ");
        }
        out.print("\"");
        out.print(parole[ i]);
        out.print("\"");
    }
    
    out.print(" ];");
    %>
    Vedi i "pezzetti" di sintassi Javascript che stai emettendo in output? È appunto per far sì che alla fine il testo completo che arriva al browser sia un codice Javascript nella giusta sintassi.

    NOTA: c'è una questione più fine ovvero l'escape dei caratteri speciali. Nell'array sopra ci sono 3 nomi senza caratteri speciali. Ma se in una stringa c'è un apice doppio o un backslash o altro di speciale, devi mandare in output la sequenza che in Javascript fa l'escape.
    Questo è a tuo carico. Puoi farlo con del tuo codice ma probabilmente se cerchi in rete ci sono già librerie Java di utility che generano una stringa che contiene la rappresentazione letterale in Javascript di una stringa.

    Ora ti è più chiara la questione in generale?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    se ho bene capito alla fine mi ritrovo una stringa che mi rappresenta l'array scritto in javascript e questo fa in modo che quando passo alla funzione javascript tale variabile venga riconosciuta a tutti gli effetti come un array in javascript??

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    ho modificato il codice in modo da passare alla funzione una stringa rappresentante un array in javascript ma non funziona ancora fornaendomi la seguente stampa nella funzione :

    undefined undefined undefined

    ecco il codice :

    codice:
     
    <html>
    
    <head>
    <script> 
    
    function azione(nomebox,flag,parola) { 
      for (var i=0; i<3; i++) {
         document.write(parola[i]+' 
    '); }
    
    }
    
    </script> 
    
     
    </head>
    
    <body>
           <% String parole[]={"Paola","Massimo","Carmela"};
           
              out.print("var parole = [ ");
    
    	for (int i = 0; i < parole.length; i++) {
        		if (i > 0) {
            			out.print(", ");
        		}
        		out.print("\"");
        		out.print(parole[ i]);
        		out.print("\"");
    	}
    
    	out.print(" ];");
    %>
    
        <script type="text/javascript"> azione('nomediv',<=true>,'[ "Paola", "Massimo", "Carmela" ]'); </script> 
    
    
                   
    </body>
    
    </html>

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Mitele
    se ho bene capito alla fine mi ritrovo una stringa che mi rappresenta l'array scritto in javascript e questo fa in modo che quando passo alla funzione javascript tale variabile venga riconosciuta a tutti gli effetti come un array in javascript??
    Scusa ma io non capisco cosa ci sia di difficile nel capire che tutto il "succo" sta solo nel scrivere "dinamicamente" un pezzo di codice sorgente Javascript (quindi testo puro con una certa sintassi) che, una volta arrivato al browser, sarà letto ed interpretato dal "motore" di Javascript del browser.

    Originariamente inviato da Mitele
    ho modificato il codice in modo da passare alla funzione una stringa rappresentante un array in javascript ma non funziona ancora
    Hai sì generato un pezzetto di codice Javascript con lo scriptlet che ho indicato io .... ma l'hai scritto nel <body> fuori da un <script>. Pertanto è normale testo che esce fuori visibile nella pagina.

    E poi comunque che vuol dire:
    <script type="text/javascript"> azione('nomediv',<=true>,'[ "Paola", "Massimo", "Carmela" ]'); </script>

    ?
    Non mi pare corretto come sintassi e nemmeno utile per quello che vuoi fare.
    Se prima di questa invocazione Javascript di azione() hai correttamente generato l'array Javascript, allora il terzo parametro nella invocazione è semplicemente parole perché questo è il nome della var che è stata generata.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    soluzione con split

    Scusa,
    io ho risolto col metodo split, ma mi piacerebbe poter rendere funzionale
    la soluzione proposta da te. Come ti ho scritto sopra non funziona , perchè la stringa che rappresenta la sintassi corretta x javascript non viene riconosciuta nel passaggio di parametri come tale.

    ecco la soluzione che ho trovato applicando il metodo split
    codice:
    <html>
     <head>
      <script> 
       function azione(nomebox,flag,parola) { 
        var t=parola.split(',');
         for (var i=0; i<3; i++) {
              document.write(t[i]+' 
    '); }
        }
      </script> 
    </head>
    <body>
           <% String parole[]={"Paola","Massimo","Carmela"};
                 String Parola="";
              
    	for (int i = 0; i < parole.length; i++) {
        		if (i > 0) {
            			Parola=Parola+", ";
        		}
        		Parola=Parola+parole[ i];
        	}
      
            %>
    <script type="text/javascript"> azione('nomediv',<%=true%>,<%=Parola%>); </script> 
    </body>
    
    </html>
    Ho provato a fare un sacco di test con la tua soluzione

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: soluzione con split

    Originariamente inviato da Mitele
    io ho risolto col metodo split
    Mi sa che non hai risolto un bel niente. Quello che "butti" in output con <%=Parola%> è una stringa che però tra l'altro non rappresenta nemmeno una stringa "letterale" in Javascript.
    Quindi il pezzo generato sarebbe:

    azione('nomediv',true,Paola, Massimo, Carmela);

    Dove appunto i 3 nomi sarebbero interpretati come variabili, non come stringhe letterali. E azione riceve 5 argomenti!

    Originariamente inviato da Mitele
    Ho provato a fare un sacco di test con la tua soluzione
    Allora o non li hai fatti nel modo giusto o non hai ancora compreso il "succo" di tutto.

    codice:
    .....
    <script type="text/javascript">
    
    <%
    String[] parole = { "Paola", "Massimo", "Carmela" };
    
    out.print("var parole = [ ");
    
    for (int i = 0; i < parole.length; i++) {
        if (i > 0) {
            out.print(", ");
        }
        out.print("\"");
        out.print(parole[ i]);
        out.print("\"");
    }
    
    out.print(" ];");
    %>
    
    azione('nomediv', <%=true%>, parole);
    
    </script>
    ....
    Così sarebbe sensato, almeno tecnicamente per questo pezzo di codice (cosa faccia poi azione() lo devi vedere tu).

    Perché alla fin fine al browser arriverebbe solo il testo, generato dinamicamente:

    codice:
    <script type="text/javascript">
    
    var parole = [ "Paola", "Massimo", "Carmela" ];
    
    azione('nomediv',true, parole);
    
    </script>
    Che in Javascript è perlomeno codice corretto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    scusami,
    per quanto riguarda la soluzione con l'uso del metodo split ,
    io l'ho provata e funziona in quanto mi viene creata una stringa contenente anche le virgole,
    la tua soluzione è quella migliore. Poichè devo creare un metodo javascript (che vada a leggere un array riempito da codice java ) che venga richiamato in piu' punti...quindi sto cercando inglobare in un'unica funzione..

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    soluzione 1

    scusa io sono riusciuto ad applicare la tua soluzione,
    ma non c'è nessun modo di poter passare un array da java a jvascript senza ulteriori passaggi??

    ecco il codice:

    codice:
    <html>
    
    <head>
    <script> 
    
    //la funzione permette di rendere visibile il contenuto di un box e di rendere invisibile tutti gli altri..
    function azione(id) { 
      <%
            String[] parole={"PRIMO","SECONDO","TERZO"}; // verrà sostituita codesta riga  da   codice che va a leggere da un file xml
    	out.print("var parole = [ ");
    
    	for (int i = 0; i < parole.length; i++) {
       	 if (i > 0) {
           	 out.print(", ");
        	}
        	out.print("\"");
        	out.print(parole[ i]);
       	out.print("\"");
    	}
    
            out.print(" ];");
           %>      
           for (var i=0; i<3; i++) { 
                if(parole[i]==id){
                    document.getElementById(id).style.visibility='visible'; 
                   }
                 else {      document.getElementById(parole[i]).style.visibility='hidden';  
                  }
           }
    }
    
    </script> 
    
    </head>
    <body>
    <%out.write("<div id=\"PRIMO\">");
         out.write("IO SONO IL PRIMO"); 
         out.write("</div>");
         out.write("<div id=\"SECONDO\">");
         out.write("IO SONO IL SECONDO"); 
         out.write("</div>");
         out.write("<div id=\"TERZO\">");
         out.write("IO SONO IL TERZO"); 
         out.write("</div>");%>
        <script type="text/javascript"> azione('TERZO'); 
        </script>               
    </body>
    </html>

  10. #10
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Java e Javascript NON interagiscono fra loro, e quindi NON si passano array.
    In ambiente Servlet/JSP, tutto quello che fa Java è generare sul SERVER una stringa di testo (contenente codice HTML, Javascript, CSS, ecc.) che viene ricevuta ed eseguita dal CLIENT. Stai parlando di due cose completamente distinte.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.