Составные компоненты jsf 2.0 - как изменить внешние компоненты / атрибуты - PullRequest
1 голос
/ 27 мая 2010

Я только изучаю JSF 2 и играю с простыми пользовательскими компонентами. Представьте себе пользовательский компонент с поддержкой ajax с двумя полями inputText:

...
<h:body>
  <composite:interface>
    <composite:attribute name="domId" required="true" />
    <composite:attribute name="value" required="true" />
  </composite:interface>
  <composite:implementation>
    <h:inputText id="code" value="#{cc.attrs.value}">
    <f:valueChangeListener binding="#{domBean}" >    
    </f:valueChangeListener>
      <f:ajax event="valueChange" execute="@this"
      render="name"/>  
    </h:inputText>

        <h:inputText id="name" value="#{domBean.name}" disabled="true">
    </h:inputText>
  </composite:implementation>
...

Страница с использованием компонента выглядит следующим образом:

...
<h:body>
  <h:form>
  <dom:domain domId="100" value="#{testCtrl.code}"/>
  </h:form>
</h:body>
...

интересный метод в классе, который определяет domBean, выглядит так:

  public void processValueChange(ValueChangeEvent event)
      throws AbortProcessingException
  {
    String code = (String) event.getNewValue();
    UIInput input= (UIInput) event.getSource();
    name = resolveCode(code); //some magic transformation
    if (name != null)
      input.setValue(code); //just want to set the "entered" / "validated" text
   }

Я ожидаю, что input.setValue (code) установит значение inputText, которое является отложенным выражением "# {cc.attrs.value}", которое связано с # {testCtrl.code} "parent" стр. К сожалению, testCtrl.code никогда не заполняется введенным значением.

Что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 31 мая 2010

Наконец, после нескольких часов трассировки, я понял, что это ошибка в реализации myfaces 2.0.0. Используя последний снимок 2.0.1, он работает.

Для получения дополнительной информации, пожалуйста, посмотрите на проблему в трекере apache: https://issues.apache.org/jira/browse/MYFACES-2675

...