javascript 未在 JSP 页面中呈现的脚本标签(使用 Spring + Tiles + JSPX)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9434755/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Script tags not rendered in JSP page (using Spring + Tiles + JSPX)
提问by Anadi Misra
Everyone,
每个人,
I am facing a strange problem including script tags in a jsp page. Of the three script I include only the first one gets endered in the final page. Here is how I have defined the layouts
我正面临一个奇怪的问题,包括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>
the view definition is as follows :
视图定义如下:
<?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>
here's the page code (registration.jspx)
这是页面代码(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>
the boby attribute is then overridden in a jspx page called register.jspx which contains the form with openid-selector. The resources folder has also been mapped
然后在一个名为 register.jspx 的 jspx 页面中覆盖 boby 属性,该页面包含带有 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>
when I access the url for this registration page I see the following code (when inspecting the elements through firebug)
当我访问此注册页面的 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>
when I view the page source (unformatted) I do see the otherwise not visible script tags; however they "do not" appear formatted like other tags in the source view appear.
当我查看页面源(未格式化)时,我确实看到了原本不可见的脚本标签;然而,它们“不会”像源视图中的其他标签那样出现格式。
<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');
});
And I have absolutely no ideas on the reasons of this strange behavior.
我对这种奇怪行为的原因完全没有想法。
SOLVED:but a new question pops up
已解决:但出现了一个新问题
thanks for the help Ralph; I tried your suggestion
感谢拉尔夫的帮助;我试过你的建议
<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>
renders the html (again no ideas why; and I am little too tiered to search it ;-) )
呈现 html(再次不知道为什么;我有点太分层了,无法搜索它;-))
<script src="0" type="text/javascript">
<script src="0" type="text/javascript">
but got this form to work
但是让这个表格起作用
<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>
this gives the expected output
这给出了预期的输出
<script src="/resources/js/openid-jquery.js" type="text/javascript">
<script src="/resources/js/openid-en.js" type="text/javascript">
is it a problem with the spring:url tag or I am missing something
是 spring:url 标签有问题还是我遗漏了什么
回答by Ralph
Use Java Script tags in this format, because some browsers have trouble if the script tag has no content:
使用这种格式的Java Script标签,因为如果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>
or more "secure"
或更“安全”
<script src="${openid-jquery_url}" type="text/javascript"><!-- required for FF3 and Opera --><jsp:text> </jsp:text></script>
Because this will prevent the jspx parser from minimizing the tag.
因为这会阻止 jspx 解析器最小化标签。
回答by Swop
One issue with your Javascript tags is that they need to have a closing tag, you cannot shortcut with /> at the end.
你的 Javascript 标签的一个问题是它们需要有一个结束标签,你不能在最后使用 /> 快捷方式。
Wrong: <script type="text/javascript" src="script.js"/>
错误的: <script type="text/javascript" src="script.js"/>
Correct: <script type="text/javascript" src="script.js"></script>
正确的: <script type="text/javascript" src="script.js"></script>
回答by J.S.
Previous comments (type="text/javascript"
and jsp:text
tag) are indeed needed but per the original question, this has nothing to do with spring:url
in specific.
确实需要以前的评论(type="text/javascript"
和jsp:text
标签),但根据原始问题,这与spring:url
具体无关。
You are using a dash (-) in the var name:
您在 var 名称中使用了破折号 (-):
var="openid-jquery_url"
Replace it with an underscore and everything will magically work...
用下划线替换它,一切都会神奇地工作......
var="openid_jquery_url"
BTW, same is true for c:url
, but you simply used a different car name with no dashes when you switched to it.
顺便说一句,对于c:url
来说也是如此,但是当您切换到它时,您只是使用了不同的汽车名称而没有破折号。