2011-03-01 19 views
8

¿Alguien puede probar este ejemplo y compartir los resultados? http://timothypowell.net/blog/?p=23
Cuando hago:Cómo usar scriptlet dentro de javascript

var myVar = '<% request.getContextPath(); %>'; 
alert(myVar); 

me sale: '<% request.getContextPath(); %>'.

Extracción de las comillas simples que encierran de '<% request.getContextPath(); %> '; da error de sintaxis. ¿Cómo puedo usar el scrptlet o la expresión dentro de una función js?

EDIT: Este enlace tiene una explicación que me ayudó:
http://www.codingforums.com/showthread.php?t=172082

+0

¿Dónde puso este código? Si está recibiendo etiquetas JSP, significa que el servidor no está procesando el archivo. ¿Es un archivo '.jsp' y su servidor está configurado para manejarlos? – casablanca

+0

Si es JSP, ERB o similar, supongo que necesitaría un '=' para la salida: 'var myVar = '<% = request.getContextPath(); %> '; ' –

Respuesta

3

suena como que está colocando el código JSP dentro de una página de JavaScript, o al menos en una página JSP no. Los scriptlets solo se pueden incluir en una página JSP (generalmente configurada para ser * .jsp).

La declaración tal como se presenta, si se procesa por el compilador JSP, daría lugar a miVar igual a '' como el formato scriplet está utilizando <% ...% > ejecuta código Java entre las etiquetas, pero no vuelve un resultado.

Por lo tanto, para usar esta etiqueta, deberá escribir manualmente un valor en la secuencia de salida de la solicitud. Para obtener la funcionalidad deseada que tiene que hacer lo siguiente:

make sure your code is in a JSP page 
    use var myVar = '<%= request.getContextPath() %>'; (note the equals sign) 

Con todo lo dicho, scriptles son vistos como una mala práctica en la mayoría de los casos. En la mayoría de los casos, debe usar expresiones JSTL y etiquetas personalizadas.

5

Esa línea de código tiene que ser colocado en una etiqueta HTML <script> en un archivo .jsp. De esta forma, el JspServlet procesará los scriptlets (y otras expresiones específicas de JSP/EL).

<script>var myVar = '<%= request.getContextPath() %>';</script> 

Tenga en cuenta que <%= %> es la sintaxis correcta para imprimir una variable, el <% %> no hace eso.

O si está destinado a ser servido en un archivo independiente .js, entonces usted necesita para cambiar su nombre a .jsp y añadir lo siguiente al principio del archivo (y cambiar la URL <script src> en consecuencia):

<%@page contentType="text/javascript" %> 
... 
var myVar = '<%= request.getContextPath() %>'; 

De esta forma, el JspServlet lo procesará y el navegador recibirá instrucciones para interpretar el cuerpo de la respuesta JSP como JavaScript en lugar de HTML.


Sin relación con el problema concreto, tenga en cuenta que scriptles se consideran poor practice. Use EL.

var myVar = '${pageContext.request.contextPath}'; 
0
var myVar = '<%=request.getContextPath() %>'; 
alert(myVar); 

Olvidaste de poner = antes de solicitar y eliminar; después getContextPath()

1

No se puede ejecutar en el interior scriptletjavascript dándole .js extensión normal. Sin embargo, usted puede darle a su .js la extensión del archivo de .jsp en cuando y enlace directo a ella como:

<script type="text/javascript" src="/script.jsp"></script> 

y ahora se puede utilizar jsp dentro de su javascript como:

var someMessage = "${someMessage}" 
var anotherMessage = "${anotherMessage}"/>" 

Esta acción es completamente válido porque lo que determina si un archivo es un archivo javascript o no es el tipo de medio MIME. Puede configurar MIME desde JSP usando:

<%@ page contentType="text/javascript" %> 
Cuestiones relacionadas