2010-11-08 19 views
7

¿Es posible usar jstl dentro de javascript?jstl dentro de javascript

estoy atando para establecer <c:set var="abc" value="yes"/>

y, posteriormente, acceder a este valor en html y ejecutar algún código. Mi problema es que el c: set se está ejecutando siempre, incluso si la condición de javascript es falsa.

<script type="text/javascript"> 
var v1 = false; 
<c:set var"abc" value="yes"/> 

if(v1){ 
    <c:set var"abc" value="no"/> 
} 
</script> 

En el código anterior, incluso si v1 es falso, "no" está configurando abc.

+2

Lea esto: http://balusc.blogspot.com/2009/05/javajspjsf-and-javascript.html Hasta el punto: Java/JSP/JSTL/EL se ejecuta en el servidor web y produce HTML/CSS/JS. El servidor web envía HTML/CSS/JS a webbrowser. Webbrowser recupera HTML/CSS/JS y lo ejecuta. Si Java ha hecho bien su tarea, el webbrowser no debería haber recuperado ninguna línea de código Java/JSP/JSTL/EL. Simplemente porque no lo entiende. – BalusC

+0

que era un buen blog ... – coder247

Respuesta

18

No tiene sentido la idea de estar "dentro de Javascript" cuando se trata de la interpretación JSP del lado del servidor. Simplemente no existe Javascript en lo que respecta a ese dominio.

Por lo tanto, sí, es posible, si te refieres a que desea hacer algo como

var something = '${abc}'; 

Tenga en cuenta que usted tiene que tener cuidado con las comillas y caracteres especiales. La función JSTL fn:escapeXml() es inútil cuando se interpola una variable JSP en una parte de la página que el navegador interpretará como fuente de Javascript. Puede usar una biblioteca JSON para codificar sus cadenas, o puede escribir su propia función EL para hacerlo.

4

Este es un hilo bastante viejo, pero es uno con el que me topé cuando tuve el mismo problema. Ya que pensé en una solución yo mismo, la publicaré aquí en caso de que ayude a alguien en el futuro.

El archivo html (o jsp) busca el texto dentro del archivo externo declarado como origen de JavaScript.

Tomcat (o similar) solo interpretan etiquetas JSTL dentro de archivos con la extensión .jsp (o tal vez algunos otros también, pero es irrelevante para esta respuesta).

Por lo tanto, cambiar el nombre de su archivo .js para darle una extensión .jsp (javascript.js a javascript_js.jsp por ejemplo)

agregar esas líneas en la parte superior de javascript_js.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

y simplemente deje el código sin cambios.

Obviamente, también necesita agregar más prefijos si usa algún otro que no sea c: en el encabezado.

Si usa Eclipse (no sé sobre otros IDEs), supondrá que no es un archivo javascript y perderá el esquema de color para las diferentes palabras clave (var, función, etc.), var name auto completion y sangría automática.

para engañar al IDE, puede agregar

// <script> 

como un comentario js, ​​antes de que el código real (después de las declaraciones "<% @"), y

// </script> 

al final del archivo, de nuevo como un comentario js.

Me funcionó.

3
<script> 
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}"; 

</script>