ooB*_*tez 15 html html5 jsp jspx
尝试使用JSPX创建HTML页面时,您将面临以下困难:
<div class="foo"></div>变得<div class="foo"/>可以被浏览器不同的解释<script...>.<script.../>IE和Firefox无法识别自闭标记.<!DOCTYPE html>)这个问题是对其他一些问题的回应,都归结为同样的问题.我找不到一个全面的答案,所以我发布了我的调查结果.
相关问题:
ooB*_*tez 24
JSPX非常适合生成HTML和XHTML.
归结为理解这种语言的XML特性.JSPX是XML而HTML则不是.其中一个含义是JSPX解析器"最小化"空标记,因为XML不区分自关闭标记和空标记.这会导致<script...>和<div></div>标记问题.但是,值得注意的是,虽然JSPX文件必须是有效的XML,但它们生成的输出却不是.因此,生成一个生成HTML(而不仅仅是XHTML)的JSPX文件是完全正确的.实际上,您可以使用JSPX生成任何文本输出,例如CSV,CSS或JS,尽管它会相当不方便.
考虑到上述情况,最干净的解决方案似乎是创建一个带有标签的自定义标签库,例如htmlScript,htmlDiv等.这些标签可以像这样使用:
<html:div styleClass="foo" selfClosing="false">${message}<html:div>
Run Code Online (Sandbox Code Playgroud)
无论内容如何,其HTML输出都将包含结束标记:
<div style="foo"></div>
<div style="foo">Hello</div>
Run Code Online (Sandbox Code Playgroud)
像这样的taglib可以让你使用JSPX构建HTML页面而不使用相当丑陋的变通方法.
构建HTML页面似乎是JSPX最常见的应用之一.有点令人惊讶的是,没有标准的HTML库.JSF有一个,但如果你使用干净的JSP它将无济于事.可能有第三方库填补了这个空白,但我找不到.
如果您不想编写自己的taglib,另一种方法是使用CDATA:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]>
Run Code Online (Sandbox Code Playgroud)
要么:
<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]>
Run Code Online (Sandbox Code Playgroud)
相关问题中的其他提议是在<jsp:text>内部放置注释或清空,<script>从而得到相同的结果:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script>
Run Code Online (Sandbox Code Playgroud)
(正如Ralph所指出的,上述内容不适用于WebSphere)或:
<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script>
Run Code Online (Sandbox Code Playgroud)
CDATA在其他一些案例中也派上用场.其中之一是打印HTML5 doctype(<!DOCTYPE html>).JSPX不允许您将DOCTYPE声明放在文档中,因为它不是有效的XML.JSPX还可以对jsp:output标记进行deifnes,但即使它是空的,它也会打印SYSTEM属性.解决方法是将DOCTYPE包装在页面开头的CDATA中:
<![CDATA[<!DOCTYPE html>]]>
Run Code Online (Sandbox Code Playgroud)
CDATA还可用于封装内联JavaScript.虽然这会因"<"符号而产生解析错误:
<script type="text/javascript">
var x = 7 < 5;
</script>
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作:
<script type="text/javascript">
<![CDATA[
var x = 7 < 5;
]]>
</script>
Run Code Online (Sandbox Code Playgroud)
请注意,JSPX中的CDATA按原样输出所有内容,但仍会评估EL表达式.因此如下:
<![CDATA[
<jsp:expression>"asd " + "def"</jsp:expression>
${1 + 2}
]]>
Run Code Online (Sandbox Code Playgroud)
生产:
<jsp:expression>"asd " + "def"</jsp:expression>
3
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
12644 次 |
| 最近记录: |