JSPX具有转向的可爱副作用:
<div class="magic"></div>
分为:
<div class="magic" />
对于许多浏览器而言,即使它是有效的XHTML,也会导致布局混乱和混乱。 因此,我使用了一个groovy脚本,使用以下正则表达式查找所有可能的错误HTML:
def m = html =~ /<(\w+)[^>]*?><\/(\w+)>/
def bad = m.findAll { it[1] == it[2] };
是否有办法让JSPX XML处理器不自动关闭标签?
答案 0 :(得分:10)
我一直在使用<div><jsp:text/></div>
答案 1 :(得分:3)
AFAIK,没有优雅的解决方案(阅读:在容器级别上可配置)。检查“jspx script element on GlassFish v3”是否有可能的解决方法。
答案 2 :(得分:2)
您可以尝试在元素内指定不会影响HTML呈现方式的内容,但会阻止XHTML被序列化为自闭元素;比如评论,处理说明或不间断的空白字符(​
)。
答案 3 :(得分:2)
您还可以创建自定义标记库或将<div></div>
封装在CDATA中。更多信息:
How to produce valid HTML with JSPX? (not XHTML)
答案 4 :(得分:1)
正如Neeme所指出的,似乎没有解决这个问题的办法。 但是我编写了一个Groovy脚本,您可以使用Maven调用(GMaven)来检查可能会自行关闭的XHTML标记。
这个脚本可能需要更好的错误消息,并不能处理所有情况,但到目前为止已经缓解了这个问题。
#!/usr/bin/env groovy
def srcdir = project.properties['srcdir'];
def badFiles = [];
def checkFile(badFiles, file) {
def htmlLines = file.readLines();
def found = [];
int i = 0;
for (html in htmlLines) {
++i;
//print html;
def m = html =~ /<(\w+)[^>]*?><\/(\w+)>/
def bad = m.findAll { it[1] == it[2] };
if (bad)
found.add(['bad' : bad, 'line' : i]);
}
if (found) {
badFiles << file;
println "File had bad HTML: " + file.canonicalPath;
println found;
}
}
def ant = new AntBuilder();
scanner = ant.fileScanner {
fileset(dir:srcdir) {
include(name:"**/*.jspx")
}
}
for (f in scanner) {
//println "Checking file: " + f.canonicalPath;
checkFile(badFiles, f);
}
if (badFiles) {
println "Bad files: " + badFiles;
fail('Bad files: ' + badFiles);
}