Как сделать так, чтобы JSF отображал строгий XHTML 1.0?

Мне нужно разработать веб-приложение, которое должно соответствовать «Закону о станке» (Legge Stanca). До сих пор я использовал jsf2.0 (Mojarra) + primefaces 3.2, но у меня возникают проблемы с проверкой при использовании

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

В частности, для пустой страницы формы сгенерирован следующий html-код:

<form id="j_idt16" name="j_idt16" method="post" action="/econsob/faces/prova_stanca.xhtml" enctype="application/x-www-form-urlencoded">
    <input type="hidden" name="j_idt16" value="j_idt16" />
    <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-8952155502993391596:-7459269746161777412" autocomplete="off" />
</form>

не проходит проверку, потому что:

  • имя атрибута в теге формы не поддерживается типом документа, требуемым законом Stanca
  • тип документа не допускает здесь элемент "ввод" (сразу под формой)
  • автозаполнение атрибута не поддерживается типом документа

Есть ли способ решить эту проблему? Возможно ли, что страница, сгенерированная jsf, не проверяется с использованием Strict?


person maxqua72    schedule 29.02.2012    source источник


Ответы (1)


Стандартный визуализатор JSF HTML разработан в соответствии с XHTML 1.0 Transitional.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Однако вы всегда можете использовать тип документа HTML5.

<!DOCTYPE html>

Он более гибкий, чем тип документа XHTML 1.0 Strict, и по-прежнему заставляет браузер работать в стандартном режиме.

Если вы действительно собираетесь использовать XHTML 1.0 Strict, вам необходимо установить следующие параметры контекста (только для Mojarra):

<context-param>
    <param-name>com.sun.faces.autoCompleteOffOnViewState</param-name>
    <param-value>false</param-value>
</context-param>
<context-param>
    <param-name>com.sun.faces.enableViewStateIdRendering</param-name>
    <param-value>false</param-value>
</context-param>

И/или модифицировать рендереры соответствующих компонентов. Вы будете рисковать только ViewExpiredExceptions всякий раз, когда какой-нибудь чрезмерно усердный браузер изменяет значение состояния просмотра с помощью некоторых средств автозаполнения.

person BalusC    schedule 29.02.2012
comment
Спасибо! К сожалению, проблема осталась. Используя параметры контекста, я могу решить проблему с автозаполнением, но не с первыми двумя элементами, поэтому cocument не проверяется. Любая идея об этом? - person maxqua72; 01.03.2012