6

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

4

4 回答 4

9

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

于 2010-11-15T18:46:56.797 回答
3

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

于 2010-10-11T17:40:43.083 回答
2

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

于 2010-10-11T17:44:25.413 回答
1

正如尼姆所指出的,似乎没有解决这个问题的办法。但是,我编写了一个 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);
}
于 2010-10-20T16:02:28.007 回答