让JSPX不要创建自我结束标记( != )

JSPX具有转向的可爱副作用:

成:

 

对于许多浏览器而言,即使它是有效的XHTML,也会导致布局混乱和混乱。 因此,我使用了一个groovy脚本,使用以下正则表达式查找所有可能的错误HTML:

 def m = html =~ /]*?>/ def bad = m.findAll { it[1] == it[2] }; 

有没有办法让JSPX XML处理器不自动关闭标签?

AFAIK,没有优雅的解决方案(阅读:在容器级别上可配置)。 检查“ GlassFish v3上的jspx脚本元素 ”以获取可能的解决方法。

我一直在使用

您可以尝试在元素内指定不会影响HTML呈现方式的内容,但会阻止XHTML被序列化为自闭元素; 像注释,处理指令或不间断的空格字符 )。

您还可以在CDATA中创建自定义标记库或封装

。 更多信息: 如何使用JSPX生成有效的HTML? (不是XHTML)

正如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); }