Проверка составного компонента JSF - PullRequest
4 голосов
/ 02 декабря 2010

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

На странице с использованием составного компонента я хочу что-то вроде этого:

<zzz:mycomponent id="my" />
<h:message for="my" />

Теперь это не работает, потому что сообщение предназначено для дочернего компонента, а не для самого составного компонента. Как сделать это для всего компонента?

Или, что еще лучше, я хотел бы добавить валидатор в составной компонент, например:

<zzz:mycomponent id="my" validator="#{bean.validateComposite}" />

И получатель что-то вроде логического массива в качестве значения, потому что внутри составного компонента есть h:selectBooleanCheckbox элементы. Это возможно?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Вы должны поместить следующий код в ваше составное определение

      <cc:interface>
          .....
          <cc:editableValueHolder name="attName" targets="Idcomponent" /><!--It allows to acces to the composite-->
          <cc:facet name="textMessage"/>                                 <!--Define the Facet-->
      </cc:interface>
      <cc:implementation id="#{cc.attrs.id}" >
          ......
          <h:inputText id="Idcomponent" value="#{cc.attrs.value}" required="#{cc.attrs.required}"/>
          <cc:renderFacet name="textMessage"/>
      </cc:implementation>

Вы можете использовать на странице JSF

      <zzz:textBox id="txbTest" label="#{}" value="#{}" >
           <f:validateLongRange for="attName" minimum="-10" maximum="10"/>
           <f:facet name="textMessage">
                <h:message for="value" style="color: blue"/>
            </f:facet>
      </zzz:textBox>

Или другой вариант:

      <zzz:textBox id="txbTest" label="#{}" value="#{}" validator="#{bean.yourValidateMethod}" >
           <f:facet name="textMessage">
                <h:message for="value" style="color: blue"/>
            </f:facet>
      </zzz:textBox>
1 голос
/ 09 декабря 2011

Возможно, очень поздно ответить на этот вопрос, но я должен это сделать так:

<zzz:mycomponent id="my">
   <f:event type="postValidate" listener="#{bean.doValidation}"/>
</zzz:mycomponent>

doValidation затем вызывается после проверки дочерних элементов в «контейнере». Метод выглядит так:

public void doValidation(ComponentSystemEvent event) {
    ...
}

И у вас есть 2 варианта в этом методе:

  • Получите доступ к дочерним компонентам (event.getComponent (). GetChildren ()) и делайте все, что вы хотите делать со значениями, представленными для этих дочерних элементов.

  • Или переберите FacesMessages и перераспределите clientId, чтобы они помещались в ваш компонент контейнера (id = my)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...