如何使用JSPX生成有效的HTML? (不是XHTML)

前端之家收集整理的这篇文章主要介绍了如何使用JSPX生成有效的HTML? (不是XHTML)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当尝试使用JSPX创建HTML页面时,您将遇到以下困难:

> JSPX最小化我们不希望使用的标签,例如< div class =“foo”>< / div>成为< div class =“foo”/>这被浏览器不同地解释
> JSPX标签必须关闭,而一些HTML标签应该保持未关闭,例如< script ...>.自封闭< script ... /> IE和Firefox无法识别标签.
>指定HTML5 doctype(<!DOCTYPE html>)
>内联JavaScript

这个问题是对另外几个问题的回应,这一切都归结于同样的问题.我找不到全面的答案,所以我发布了我的发现结果.

相关问题:

> jspx script element on GlassFish v3
> Keep JSPX from creating self closing tags (<div></div> != <div/>)

解决方法

JSPX非常适合生成HTML和XHTML.

它归结为了解这种语言的XML性质. JSPX是XML,而HTML不是.其中一个含义是JSPX解析器“最小化”空标签,因为XML不区分自我关闭标签和空标签.这导致< script ...>和< div>< / div>标签问题但是值得注意的是,虽然JSPX文件必须是有效的XML,但它们所产生的输出则不是.因此,让JSPX文件生成HTML(不仅仅是XHTML)是完全正确的.事实上,您可以使用JSPX来生成任何文本输出,如CSV,CSS或JS,尽管这将是相当不方便的.

考虑到上述情况,最干净的解决方案似乎是使用诸如htmlScript,htmlDiv等标签来创建自定义taglib.这些标签可以像这样使用:

<html:div styleClass="foo" selfClosing="false">${message}<html:div>

它的HTML输出将包含结束标签,不管内容如何:

<div style="foo"></div>
<div style="foo">Hello</div>

像这样的taglib将允许您使用JSPX构建HTML页面,而不使用相当难看的解决方法.

构建HTML页面似乎是JSPX最常见的应用之一.有一点令人惊讶的是没有标准的HTML库. JSF有一个,但如果你使用干净的JSP它将不会帮助你.可能是第三方图书馆填补了这个差距,但找不到它.

如果你不喜欢编写自己的taglib,另一种方法是使用CDATA:

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js">]]>

要么:

<![CDATA[<script type="text/javascript" src="/js/jquery-1.4.4.min.js"></script>]]>

相关问题中的其他提案是将评论或空的< jsp:text>里面< script>其结果相同:

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><!-- Prevent self-closing --></script>

(如Ralph所说,以上不适用于WebSphere)
要么:

<script type="text/javascript" src="/js/jquery-1.4.4.min.js"><jsp:text></jsp:text></script>

CDATA也在其他几种情况下派上用场.其中一个是打印HTML5 doctype(<!DOCTYPE html>). JSPX不会让您将DOCTYPE声明放在您的文档中,因为它不是有效的XML. JSPX还清除了jsp:output标签,但它打印SYSTEM属性,即使它是空的.解决方法是将DOCTYPE包装在页面开头的CDATA中:

<![CDATA[<!DOCTYPE html>]]>

CDATA也可用于封装内联JavaScript.虽然这会产生解析错误,因为“<”标志:

<script type="text/javascript">
    var x = 7 < 5;
</script>

这可以正常工作:

<script type="text/javascript">
    <![CDATA[
    var x = 7 < 5;
    ]]>
</script>

请注意,JSPX中的CDATA会按原样输出所有内容,但仍会评估EL表达式.因此如下:

<![CDATA[
<jsp:expression>"asd " + "def"</jsp:expression>
${1 + 2}
]]>

生产:

<jsp:expression>"asd " + "def"</jsp:expression>
3

希望这可以帮助 :)

猜你在找的HTML相关文章