阻止JSPX创建自闭标签(<div> </div>!= <div>)</div>

时间:2010-10-11 15:43:49

标签: java xml groovy jspx

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处理器不自动关闭标签?

5 个答案:

答案 0 :(得分:10)

我一直在使用<div><jsp:text/></div>

答案 1 :(得分:3)

AFAIK,没有优雅的解决方案(阅读:在容器级别上可配置)。检查“jspx script element on GlassFish v3”是否有可能的解决方法。

答案 2 :(得分:2)

您可以尝试在元素内指定不会影响HTML呈现方式的内容,但会阻止XHTML被序列化为自闭元素;比如评论,处理说明或不间断的空白字符&#x200B;)。

答案 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);
}