2012-02-24 11 views
5

todos,etiquetas de script no prestados en la página JSP (utilizando Spring + + Azulejos JSPX)

Estoy frente a un problema extraño que incluye etiquetas script en una página JSP. De los tres guiones que incluyo, solo el primero se enmarca en la página final. Así es como he definido los diseños

<?xml version="1.0" encoding="UTF-8"?> 
<!--$Id$ --> 
<!DOCTYPE tiles-definitions PUBLIC 
     "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" 
     "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> 
<tiles-definitions> 
<definition name="default" template="/WEB-INF/layouts/default.jspx"> 
    <put-attribute name="header" value="/WEB-INF/views/header.jspx" /> 
    <put-attribute name="submenu" value="/WEB-INF/views/submenu.jspx" /> 
    <put-attribute name="body" value="/WEB-INF/views/body.jspx" /> 
    <put-attribute name="footer" value="/WEB-INF/views/footer.jspx" /> 
</definition> 
<definition name="registration" template="/WEB-INF/layouts/registration.jspx"> 
    <put-attribute name="header" value="/WEB-INF/views/header.jspx" /> 
    <put-attribute name="body" value="/WEB-INF/views/body.jspx" /> 
</definition> 
</tiles-definitions> 

la definición de vista es el siguiente:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE tiles-definitions PUBLIC 
    "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN" 
    "http://tiles.apache.org/dtds/tiles-config_2_1.dtd"> 
    <tiles-definitions> 
    <definition extends="registration" name="register/default"> 
    <put-attribute name="body" value="/WEB-INF/views/register/register.jspx"/> 
    </definition>  
    </tiles-definitions> 

aquí es el código de la página (registration.jspx)

<html xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:tiles="http://tiles.apache.org/tags-tiles" xmlns:c="http://java.sun.com/jsp/jstl/core" version="2.0"> 
<jsp:output doctype-root-element="HTML" doctype-system="about:legacy-compat" /> 
<jsp:directive.page contentType="text/html;charset=UTF-8" /> 
<jsp:directive.page pageEncoding="UTF-8" /> 
<jsp:output omit-xml-declaration="true" /> 
<head> 
<c:url var="rootUrl" value="/resources/" /> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<meta http-equiv="X-UA-Compatible" content="IE=8" /> 
<link rel="stylesheet" type="text/css" href="/resources/css/screen.css" /> 
<link rel="stylesheet" type="text/css" href="/resources/css/openid.css" /> 
<link rel="stylesheet" type="text/css" href="/resources/css/openid-shadow.css" /> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"/> 
<script type="text/javascript" src="/resources/js/openid-jquery.js"/> 
<script type="text/javascript" src="/resources/js/openid-en.js"/> 
<script type="text/javascript"> 
//<![CDATA[ 
    $(document).ready(function() { 
     openid.init('openid_identifier'); 
    }); 
//]]> 
</script> 
<title>Mystery Shopping</title> 
</head> 
<body> 
    <tiles:insertAttribute name="header" /> 
    <tiles:insertAttribute name="body" /> 
</body> 
</html> 

el atributo es boby luego se anula en una página jspx llamada register.jspx que contiene el formulario con openid-selector. La carpeta de recursos también ha sido mapeado

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 

<!-- Scans within the base package of the application for @Components to configure as beans --> 
<context:component-scan base-package="vm.brands.controller" /> 

<mvc:resources mapping="/resources/**" location="/resources/" /> 

<bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean" /> 

</beans> 

cuando accedo a la dirección URL de esta página de registro veo el siguiente código (al inspeccionar los elementos a través de Firebug)

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=8"> 
<link rel="stylesheet" type="text/css" href="/resources/css/screen.css"> 
<link rel="stylesheet" type="text/css" href="/resources/css/openid.css"> 
<link rel="stylesheet" type="text/css" href="/resources/css/openid-shadow.css"> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"> 
<title>Mystery Shopping</title> 
</head> 

cuando veo la fuente de la página (sin formato) Veo las etiquetas de script que de otro modo no serían visibles; sin embargo, "no" aparecen formateados como aparecen otras etiquetas en la vista de origen.

<html version="2.0"><head><meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/><meta content="IE=8" http-equiv="X-UA-Compatible"/><link href="/resources/css/screen.css" type="text/css" rel="stylesheet"/><link href="/resources/css/openid.css" type="text/css" rel="stylesheet"/><link href="/resources/css/openid-shadow.css" type="text/css" rel="stylesheet"/><script src="http://code.jquery.com/jquery-1.7.1.min.js" type="text/javascript"/><script src="/resources/js/openid-jquery.js" type="text/javascript"/><script src="/resources/js/openid-en.js" type="text/javascript"/><script type="text/javascript"> 
    $(document).ready(function() { 
     openid.init('openid_identifier'); 
    }); 

Y no tengo absolutamente ninguna idea sobre los motivos de este extraño comportamiento.

resuelto:sino una nueva pregunta aparece

gracias por la ayuda Ralph; He intentado su sugerencia

<spring:url value="/resources/js/openid-jquery.js" var="openid-jquery_url"/> 
<spring:url value="/resources/js/openid-en.js" var="openid-en_url"/> 
<script src="${openid-jquery_url}" type="text/javascript"><jsp:text> </jsp:text></script> 
<script src="${openid-en_url}" type="text/javascript"><jsp:text> </jsp:text></script> 

representa el HTML (de nuevo sin idea de por qué, y yo estoy demasiado niveles para buscarla ;-))

<script src="0" type="text/javascript"> 
<script src="0" type="text/javascript"> 

pero tengo esta forma de trabajar

<c:url var="rootUrl" value="/resources/" /> 
<script src="${rootUrl}js/openid-jquery.js" type="text/javascript"><jsp:text> </jsp:text></script> 
<script src="${rootUrl}js/openid-en.js" type="text/javascript"><jsp:text> </jsp:text></script> 

esto da el resultado esperado

<script src="/resources/js/openid-jquery.js" type="text/javascript"> 
<script src="/resources/js/openid-en.js" type="text/javascript"> 

es un problema con la primavera: la etiqueta del URL o me estoy perdiendo algo

+0

No creo que esta sea la causa; pero ¿se dio cuenta de que carga el formulario 'jquery-1.7.1.min.js' en una URL diferente' http: // code.jquery.com/jquery-1.7.1.min.js' en lugar de los recursos de su servidor? – Ralph

+0

yeap Creo que no sirve de nada guardar una copia en mi aplicación web cuando tenemos una forma de recuperarla del modo alojado del servidor jquery. No utilicé el formato spring: url para jquery ya que estaba siendo incluido en primer lugar. –

Respuesta

12

etiquetas uso de Java Script en este formato, debido a que algunos navegadores tienen problemas si la etiqueta script no tiene contenido:

<spring:url value="/resources/js/openid-jquery.js" var="openid-jquery_url" /> 
<script src="${openid-jquery_url}" type="text/javascript"><!-- required for FF3 and Opera --></script> 

o más "seguro"

<script src="${openid-jquery_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script> 

Porque esto evitará que el analizador jspx minimice la etiqueta.

+0

He editado la pregunta porque no puedo responder mi propia pregunta. consiguió que funcione, pero a través de c: url, primavera: url estaba sustituyendo vars al número 0 –

1

Un problema con sus etiquetas de JavaScript es que necesitan tener una etiqueta de cierre, no puede atajar con /> al final.

incorrecto: <script type="text/javascript" src="script.js"/>

correcta: <script type="text/javascript" src="script.js"></script>

0

comentarios anteriores (type="text/javascript" y jsp:text etiqueta) son ciertamente necesarios, pero por la pregunta original, esto no tiene nada que ver con spring:url en específico.

Está utilizando un guión (-) en el nombre var:

var="openid-jquery_url" 

sustituirlo por un guión bajo y todo se resolverá mágicamente ...

var="openid_jquery_url" 

Por cierto, mismo es cierto para c:url, pero simplemente usaste un nombre de automóvil diferente sin guiones cuando lo cambiaste.

Cuestiones relacionadas