1

私はJSF2を学び、単純なカスタムコンポーネントで遊んでいます。2つのinputTextフィールドを持つajax対応のカスタムコンポーネントを想像してみてください。

...
<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値を設定することを期待します。これは、「親」ページによって#{testCtrl.code}にリンクされている遅延式「#{cc.attrs.value}」です。残念ながら、testCtrl.codeに入力された値が入力されることはありません。

私が間違っていることは何ですか?

ありがとうございました!

4

1 に答える 1

1

最後に、何時間もトレースした後、これがmyfaces2.0.0実装のバグであることに気付きました。最近の2.0.1スナップショットを使用すると、機能します。

詳細については、apacheトラッカーで問題を確認してください: https ://issues.apache.org/jira/browse/MYFACES-2675

于 2010-05-31T12:11:32.320 に答える