2012-06-14 3 views
0

Одна из целей нашего проекта, которая имеет тяжелое требование DDA, заключается в обеспечении того, чтобы отображаемый HTML был 100% совместим с переходной грамматикой xhtml 1.0. К сожалению, у меня есть одна ошибка, которую я не могу устранить. Это потому, что JSF впрыскивает следующий фрагмент JavaScript в страницу (отформатирован для ясности), который, потому что это не обернуты в CDATA, отвергается w3c валидатор с этим сообщением:JSF 1.2 инъекция javaScript, вызывающая 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> 

ответ

2

Это невозможно без редактирования самого файла JS.

Extract jsf-impl.jar файл, скопировать com/sun/faces/sunjsf.js файл в проект WebAPP точно такой же структуры пакета, то есть в качестве sunjsf.js файла внутри com.sun.faces пакета. Измените < на &lt; и сохраните его. Этот файл будет иметь приоритет над файлом JAR в иерархии иерархии классов и будет использоваться вместо этого.

В качестве альтернативы вы также можете всегда перестроить файл JAR с помощью отредактированного файла JS.

+0

Фантастический :) Еще раз я в восторге от ваших навыков jsf. –

1

попытки изменить блок сценария как так

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

    ...your code here 

//]]> 
</script> 

это должно сделать блок всего скрипта проигнорировано валидатора анализатором: если ваш исходный код содержит символы, такие как больше (>), меньше (<), вы должны положить его в CDATA разделителей, чтобы сделать его подтвержденным.

+0

сценарий автоматически генерируется инфраструктурой JSF ... –

+0

, так что либо вы переключаетесь на другой тип doctype (например, html5), либо просто игнорируете сообщение валидатора ... – fcalderan

+0

поверьте мне, я бы хотел, чтобы я мог xhtml, но и то, и совместимость с грамматикой являются абсолютно неотъемлемыми требованиями нашего клиента, и они очень настойчивы в этом, но BalusC дал мне тот ответ, который мне нужен. –

Смежные вопросы