【问题标题】:Script tags not rendered in JSP page (using Spring + Tiles + JSPX)JSP 页面中未呈现的脚本标签(使用 Spring + Tiles + JSPX)
【发布时间】:2012-02-24 16:54:33
【问题描述】:

大家,

我遇到了一个奇怪的问题,包括 jsp 页面中的脚本标签。在我包含的三个脚本中,只有第一个在最后一页中呈现。 这是我定义布局的方式

<?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>

视图定义如下:

<?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>

这是页面代码(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>

boby 属性然后在一个名为 register.jspx 的 jspx 页面中被覆盖,该页面包含带有 openid-selector 的表单。资源文件夹也已映射

<?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>

当我访问此注册页面的 url 时,我看到以下代码(通过 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>

当我查看页面源代码(未格式化)时,我确实看到了其他不可见的脚本标签;但是,它们“不”像源视图中的其他标签一样显示格式。

<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');
    });

而且我完全不知道这种奇怪行为的原因。

已解决: 但弹出了一个新问题

感谢拉尔夫的帮助;我试过你的建议

<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>

呈现 html(再次不知道为什么;而且我的层次太少,无法搜索 ;-))

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

但是让这个表格可以工作

<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>

这给出了预期的输出

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

是 spring:url 标签有问题还是我遗漏了什么

【问题讨论】:

  • 我不认为这是原因;但是您是否注意到您从不同的 URL http://code.jquery.com/jquery-1.7.1.min.js 加载了 jquery-1.7.1.min.js 而不是您的服务器资源?
  • 是的,当我们有办法从 jquery 服务器的托管模式获取副本时,我觉得将副本保存到我的 Web 应用程序是没有用的。我没有为 jquery 使用 spring:url 格式,因为它一开始就被很好地包含了。

标签: javascript spring tiles jspx


【解决方案1】:

使用这种格式的Java Script标签,因为如果脚本标签没有内容,有些浏览器会出现问题:

<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>

或更“安全”

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

因为这会阻止 jspx 解析器最小化标记。

【讨论】:

  • 我已经编辑了这个问题,因为我无法回答我自己的问题。让它工作,但通过 c:url,spring:url 将 vars 替换为数字 0
【解决方案2】:

您的 Javascript 标签的一个问题是它们需要有一个结束标签,您不能在末尾使用 /> 快捷方式。

错误:&lt;script type="text/javascript" src="script.js"/&gt;

正确:&lt;script type="text/javascript" src="script.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案3】:

    确实需要以前的 cmets(type="text/javascript" 和 jsp:text 标签),但根据原始问题,这与 spring:url 具体无关。

    您在 var 名称中使用破折号 (-):

    var="openid-jquery_url"
    

    用下划线替换它,一切都会神奇地工作......

    var="openid_jquery_url"
    

    顺便说一句,c:url 也是如此,但是当您切换到它时,您只是使用了一个没有破折号的不同汽车名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 2015-03-18
      • 2019-04-04
      相关资源
      最近更新 更多