JSF 2 композиты и привязка для валидации - PullRequest
2 голосов
/ 10 октября 2011

У меня проблема с композитом JSF, который проверяет внутренние поля ввода.Следующий фрагмент кода работает до тех пор, пока включен только один композит.

<div id="#{cc.clientId}" >
  <h:panelGroup styleClass="#{not firstname.valid ? 'fmError' : ''}">
    <div class="col220">
        <h:outputLabel for="firstname" value="Vorname(n):" />
    </div>
    <div class="col220">
        <h:inputText id="firstname" styleClass="fmTxt " 
            value="#{cc.attrs.person.firstname}" binding="#{firstname}">
            <f:validateRequired />
        </h:inputText>

    </div>
  </h:panelGroup>
</div>

Как вы можете видеть, я использую cc.clientId, чтобы обернуть композит и иметь уникальные идентификаторы для компонентов внутрикомпозит.Таким образом, можно включить более одной композиции на одну страницу.

Проблемы начинаются с проверки и необходимости связать компонент inputText.Мне нужно, чтобы запросить результат проверки в PanelGroup для выделения не только inputField, но и метки.

Этот код отлично работает при использовании только одного композита на странице.При использовании второго, inputField 'firstname' больше не отображается.Я предполагаю, что это связано с привязкой и ее жестко закодированным '# {firstname}'.

Теперь вопрос: как я могу создать уникальный идентификатор для атрибута привязки?

I'mблагодарен за любую подсказку.Спасибо!

1 Ответ

3 голосов
/ 10 октября 2011

Я предлагаю создать псевдоним с уникальным идентификатором и сохранить его в области запроса.

<div id="#{cc.clientId}">
  <ui:param name="firstname" value="#{cc.clientId}_firstname" />
  <h:panelGroup styleClass="#{not requestScope[firstname].valid ? 'error' : ''}">
    <div class="col220">
        <h:outputLabel for="firstname" value="Vorname(n):" />
    </div>
    <div class="col220">
        <h:inputText id="firstname" styleClass="fmTxt " 
            value="#{cc.attrs.value}" binding="#{requestScope[firstname]}">
            <f:validateRequired />
        </h:inputText>

    </div>
  </h:panelGroup>
</div>
...