Jsf Как создать контейнер именования

У меня проблема с дублированием идентификаторов в моем приложении JSF. Я прочитал в этом посте , что одним из возможных решений является использование контейнера имен. Не могли бы вы привести пример использования контейнера именования, чтобы избежать дублирования идентификаторов? Я использую Facelets.

7
задан Community 23 May 2017 в 12:15
поделиться

2 ответа

Вот что у меня сработало при использовании JSF1.2 и фейслетов:

Я обнаружил, что ни , ни на самом деле не являются именованием контейнер, поэтому использование одного и того же компонента более одного раза в одной и той же форме приведет к сбою с исключением повторяющегося идентификатора. Это кажется плохим дизайном, поскольку весь смысл компонентов заключается в возможности повторного использования. Чтобы обойти эту проблему, я включаю в каждый компонент и устанавливаю его идентификатор в качестве параметра тега моего компонента:

myComponent.xhtml:

<ui:component>      
    <f:subview id="#{id}">
        ....component code
    </f:subview>
</ui:component>

и его использование на других страницах просто (после правильной настройки taglib.xml и web.xml):

<myTagLib:myComponent id="myCompA" />
12
ответ дан 6 December 2019 в 12:45
поделиться

Я предлагаю сделать шаг назад и исследовать , почему возникает проблема с дублированием идентификаторов. После того, как вы установили основную причину, просто исправьте ее «обычным» способом, а не создавайте свой собственный компонент UINamingContainer .

Существует несколько возможных причин ошибок повторяющихся идентификаторов, которые помогут вам решить эту проблему:

  • Тот же идентификатор используется на разных UIComponent компонентах внутри тот же компонент UINamingContainer .
  • Физически разные компоненты связаны с одинаковым свойством UIComponent того же компонента .
  • Только JSP: f: subview объявлен на родительской странице вместо страницы include .
  • Одна и та же включаемая страница включается несколько раз внутри того же UINamingContainer компонента.
  • Компонент создается динамически (например, новый UIComponent () ) без присвоенного идентификатора .

Здесь UINamingContainer находится под каждым из , и .

Если приведенные выше предложения не помогли, обновите свой вопрос, включив в него минимально возможный фрагмент кода (таким образом, без всего нерелевантного кода / беспорядка, такого как несвязанные компоненты, библиотеки, HTML / CSS / JS / и т. д.), который воспроизводит ту же проблему, просто скопировав ее и запустив без каких-либо изменений.

4
ответ дан 6 December 2019 в 12:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: