Отказ от ответственности: я понимаю, что JSF 2.0 существует и мне знакомо. Этот вопрос относится к JSF 1.1 под IBM WebSphere .
Я слышал / видел различные степени поддержки представления о том, что ВСЕ компоненты JSF на странице должны иметь атрибут ID, указанный во время разработки. Когда я говорю «ВСЕ» компоненты, я имею в виду все… включая компоненты, которые традиционно «только для вывода», например, <h:ouputText>
, <h:panelGroup>
, <h:panelGrid>
и т. Д. *
Этот вопрос постоянно возникает изнутри, в ответ на появление исключений «Duplicate Component ID» в журналах. Компоненты, которые утверждают, что имеют повторяющиеся идентификаторы, иногда являются идентификаторами, сгенерированными JSF, или идентификаторами элементов, которые не могут быть установлены явно (например, элементы в строке сетки с n числом строк).
Я ищу некоторые объективные указания относительно того, какие идентификаторы следует, можно или нужно (или нет) устанавливать в отношении гаммы компонентов JSF.
Моя главная проблема двойная:
- ретро-активное добавление идентификаторов ко всему (даже к вещам, которые, вероятно, не нуждаются в них) в безумном порыве, чтобы исключить любую возможность
исключение дублирования идентификатора компонента может быть не лучшим
использование времени.
- результирующий раздув в потоке HTML в
время выполнения / рендеринга просто безобразно, например,
<span>
элементы с идентификаторами
которые не добавляют абсолютно никакой конструктивной ценности на страницу
ДОПОЛНЕНИЕ:
Судя по большому количеству исследований и других постов на SO, я все еще могу быть немного смущен. Что из нижеперечисленного является "правильным"?
Метод A: <f:subview>
Указано на включенной странице
<%-- parent_page.jsp --%>
<html>
<f:view>
<jsp:include page="included_child_page.jsp" />
</f:view>
</html>
<%-- included_child_page.jsp --%>
<f:subview id="myID">
<h:outputText value="Some content here..." />
</f:subview>
Метод B: <f:subview>
Указано на включающей / родительской странице
<%-- parent_page.jsp --%>
<html>
<f:view>
<f:subview id="myID">
<jsp:include page="included_child_page.jsp" />
</f:subview>
</f:view>
</html>
<%-- included_child_page.jsp --%>
<h:outputText value="Some content here..." />
Подавляющее большинство наших JSP используют метод A, описанный выше. Мы регулярно получаем ошибки Duplicate Component ID со многих из этих страниц. Несколько страниц были изменены, чтобы использовать метод B. Мы редко / никогда не получаем ошибок с этих страниц - когда мы делаем, это обычно из компонентов, которые представляют коллекции (таблицы / списки), где произвольный идентификатор должен быть создан реализацией Faces в время выполнения для данной строки или элемента.
Из этого опыта мне было трудно понять, какой путь должен работать все время. Какой путь правильный ?