0

DDAの要件が高いこのプロジェクトの目標の1つは、レンダリングされたHTMLがxhtml 1.0移行文法に100%準拠していることを確認することです。残念ながら、排除できないエラーが1つあります。これは、JSFが次のjavaScriptのスニペットをページに挿入しているためです(わかりやすくするためにフォーマットされています)。これは、CDATAでラップされていないため、w3cバリデーターによって次のメッセージで拒否されます。

Line 443, Column 122: character "<" is the first character of a delimiter but occurred as data

…dp;if (adp != null) {for (var i = 0;i < adp.length;i++) {f.removeChild(adp[i])…

?

This message may appear in several cases:

    You tried to include the "<" character in your page: you should escape it as "&lt;"
    You used an unescaped ampersand "&": this may be valid in some contexts, but it is recommended to use "&amp;", which is always safe.
    Another possibility is that you forgot to close quotes in a previous tag.

私の質問は、JSFにスクリプトブロックをCDATAでラップさせるか、スクリプトを外部化することは可能ですか?

<script type="text/javascript" language="Javascript">
    function dpf(f) {
        var adp = f.adp;
        if (adp != null) {
            for (var i = 0;i < adp.length;i++) {
                f.removeChild(adp[i]);
     }}};

    function apf(f, pvp) {
        var adp = new Array();
        f.adp = adp;
        var ps = pvp.split(',');
        for (var i = 0,ii = 0;i < ps.length;i++,ii++) {
            var p = document.createElement("input");p.type = "hidden";p.name = ps[i];p.value = ps[i + 1];
            f.appendChild(p);
            adp[ii] = p;i += 1;
     }};

     function jsfcljs(f, pvp, t) {
        apf(f, pvp);
        var ft = f.target;
        if (t) {
            f.target = t;
        }
        f.submit();
        f.target = ft;dpf(f);
     };
</script>
4

2 に答える 2

2

これは、JS ファイル自体を編集しないと不可能です。

ファイルを抽出し、まったく同じパッケージ構造で、つまりパッケージ内のファイルとしてファイルを webapp プロジェクトにjsf-impl.jarコピーします。toを編集して保存します。このファイルは、クラスローディング階層の JAR ファイルのファイルよりも優先されるため、代わりに使用されます。com/sun/faces/sunjsf.jssunjsf.jscom.sun.faces<&lt;

または、編集した JS ファイルを使用して JAR ファイル自体をいつでも再構築することもできます。

于 2012-06-14T13:32:15.163 に答える
1

そのようにスクリプトブロックを変更してみてください

<script type="text/javascript">
//<[!CDATA[

  ...your code here

//]]>
</script>

これにより、スクリプトブロック全体がバリデーターパーサーによって無視されるようになります。コードソースに大(>)、小(<)などの文字が含まれている場合は、それをCDATA区切り文字で囲んで検証する必要があります。

于 2012-06-14T07:39:07.967 に答える