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]  };

タグをセルフクローズしないようにJSPXXMLプロセッサを使用する方法はありますか?

4

4 に答える 4

9

使ってきました<div><jsp:text/></div>

于 2010-11-15T18:46:56.797 に答える
3

私の知る限り、これに対するエレガントな解決策はありません(読み取り:コンテナレベルで構成可能)。考えられる回避策については、「 GlassFish v3 の jspx スクリプト要素」を確認してください。

于 2010-10-11T17:40:43.083 に答える
2

HTML のレンダリング方法には影響しないが、XHTML が自己終了要素としてシリアル化されるのを防ぐ要素内のコンテンツを指定してみることができます。コメント、処理命令、改行しない空白文字( &#x200B;) など。

于 2010-10-11T17:44:25.413 に答える
1

Neeme が指摘したように、この問題の解決策はないようです。ただし、Maven 呼び出し (GMaven) を使用して、自己クローズされる可能性のある XHTML タグをチェックできる Groovy スクリプトを作成しました。

このスクリプトはおそらくより良いエラー メッセージを必要とし、すべてのケースを処理するわけではありませんが、これまでのところ問題は軽減されています。

#!/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 に答える