Я решил попробовать JSF 2.2 (или то, что у нас есть), поэтому я взял последнюю сборку моментального снимка Mojarra и настроил ее. Теперь у меня есть шаблон, который использует prettyphoto. Он отлично работал на JSF 2.1, но в ту минуту, когда я перешел на последнюю сборку mojarra, окно с красивой фотографией не показывалось. Это сводило меня с ума на пару часов (сейчас у меня на компьютере 2 сервера Glassfish, один с последней модаррой, а другой со стабильной). Я заставил его работать после того, как понял, что последняя сборка mojarra не игнорирует DOCTYPE клиента шаблона, начинающегося с <ui:composition>
.
Чтобы сделать мой пример более понятным. У меня есть что-то вроде этого:
JSF МАСТЕРСКИЙ ШАБЛОН С DOCTYPE HTML И НЕСКОЛЬКИМИ ИНТЕРФЕЙСАМИ:ВСТАВКИ
<?xml version='1.0' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
ОБЫЧНАЯ СТРАНИЦА JSF, КОТОРАЯ РЕАЛИЗУЕТ ГЛАВНЫЙ ШАБЛОН С СОСТАВОМ DOCTYPE:
<?xml version='1.0' encoding='UTF-8' ?>
<?xml version='1.0' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:jsf="http://java.sun.com/jsf"
template="./WEB-INF/template/MASTERTEMPLATE.xhtml>
.....<ui:define /> etc etc....
</ui:composition>
Когда этот более поздний клиент шаблона отображается в браузере, он отправляется с композицией типа документа. Я думал, что он должен игнорировать все, что находится за пределами ui:composition.. В стабильной сборке Mojarra Composition DOCTYPE игнорируется, и он выходит как HTML...
Я изначально подозревал, что это баг, но может это специально? Хотя они должны были бы сказать вам это, я потерял весь день с этим.