2010-05-22 8 views

Répondre

3

Je suppose que vous exécutez probablement Javascript sur le client (dans le navigateur), et Java dans vos pages JSP sur le serveur. Vous ne pouvez pas accéder à une variable côté client sur le serveur. Vous pouvez envoyer une valeur côté client valeur du client au serveur pour le traitement côté serveur. Vous feriez probablement cela via un Ajax call, ou simplement en soumettant un formulaire.

Modifier Par exemple, le code Javascript envoie la valeur de la variable foo à la page côté serveur « test.jsp » en utilisant le nom du champ « foofield » (nom légèrement différent pour être clair). Celui-ci utilise Prototype, mais jQuery, Closure et all the other libs peut faire la même chose, juste avec une syntaxe légèrement différente:

Java côté serveur (dans le JSP)   — ceci est comme obtenir les champs d'un formulaire qui a été soumis:

String foo; 

foo = request.getParameter("foofield"); 

côté client Javascript (en utilisant Ajax.Request Prototype):

// Our client-side `foo` variable 
var foo = "Hi there"; 

// Send it to the server via Ajax (Prototype version) 
new Ajax.Request('test.jsp', { 
    parameters: {foofield: foo}, 
    onSuccess: handleSuccess, // Function to call on success; not shown 
    onFailure: handleFailure  // Function to call on failure; not shown 
}); 

Si vous pré fer jQuery pour le côté client, voici que le code Prototype réécrite pour la fonction de jQuery ajax:

// Our client-side `foo` variable 
var foo = "Hi there"; 

// Send it to the server via Ajax (jQuery version) 
$.ajax({ 
    url: 'test.jsp', 
    data: {foofield: foo}, 
    success: handleSuccess, // Function to call on success; not shown 
    error: handleFailure  // Function to call on failure; not shown 
}); 
+0

Pouvez-vous donner un exemple de comment puis-je accéder à la valeur de la variable côté client côté serveur? – Rachel

+0

@Rachel: vous auriez besoin de JavaScript pour faire une requête au serveur (AJAX) ou remplir un formulaire avec les valeurs et le soumettre. – Dormilich

+0

@Rachel: J'ai ajouté quelques exemples –

0

Impossible. Vous pouvez accéder à une variable JSP en javascript mais la variable javascript n'est pas accessible dans JSP.

+0

Vous ne pouvez pas * "accéder à une variable JSP dans javascript [côté client]" *. Vous pouvez envoyer la valeur * de la variable au client en la publiant dans le code Javascript dans un bloc 'script' généré par le serveur, ce qui n'est pas la même chose. –

+0

Pouvez-vous expliquer s'il est possible de faire autrement? – Rachel

1

Vous ne pouvez pas y accéder directement. En effet, voici comment une page est rendue:

1. On the server, the JSP code runs and generates HTML/JavaScript. 
2. The HTML/JavaScript is sent to the client's browser. 
3. The browser then renders the HTML and runs the JavaScript. 

Comme vous pouvez le voir, le JavaScript est exécuté après la façon JSP fonctionne, de sorte qu'ils ne peuvent pas accéder directement à des variables de l'autre.

Ce que vous pourriez faire est de produire du code JavaScript qui initialise une variable basée sur une valeur dans le code JSP. Par exemple, si vous générer du code comme ceci (excusez ma syntaxe, je ne sais pas JSP):

<script> 
    var JSPValue = /*jsp code that prints the value of a variable*/; 
    //rest of JavaScript code... 
</script> 

Alors le JavaScript peut accss JSPValue, juste parce qu'il aura été mis là par le serveur. Par exemple, lorsqu'il est envoyé au navigateur, il pourrait ressembler à:

<script> 
    var JSPValue = 42; 
    //rest of JavaScript code... 
</script> 
+0

La suggestion de créer une variable JavaScript globale répond à la question, mais n'est pas recommandée. La création dynamique de variables globales arbitraires à partir de JSP a tendance à conduire les développeurs qui n'écrivent pas pour JavaScript principalement dans une fausse impression de fonctionnalité qui est sujette à des collisions d'espaces de noms et à des échecs de code inattendus. –

0

Comme le javascript est en cours d'exécution sur le côté client et le jsp est en cours d'exécution sur le côté serveur, il est impossible d'accéder à la variable javascript jsp code, mais vous pouvez accéder à cette variable javascript côté serveur en passant cette variable avec la requête en tant que paramètre de requête. Comme les paramètres de requête sont présents dans l'objet request disponible pour le code jsp, vous pouvez y accéder.