1

次の複合コンポーネントを作成しましたが、コンポーネントの外部要素を再レンダリングする方法が見つかりませんでした。

 <h:panelGroup id="#{cc.attrs.id}Cmtp" rendered="#{cc.attrs.rendered}">
      <div id="#{cc.attrs.id}" class="xyz-select #{cc.attrs.styleClass}" >
        <h:inputText id="input" disabled="#{cc.attrs.disabled}"
          value="#{cc.attrs.value}"
          tabindex="#{cc.attrs.tabindex}" maxlength="#{cc.attrs.maxlength}" 
          converter="#{cc.attrs.converter}">
          <a4j:ajax event="change" render="select" />        
        </h:inputText>
        <rich:select disabled="#{cc.attrs.disabled}"
          id="select" value="#{cc.attrs.value}"
          listWidth="#{cc.attrs.listWidth}"
          converter="#{cc.attrs.converter}">          
          <f:selectItems value="#{cc.attrs.items}" var="xyz"
            itemValue="#{xyz}" itemLabel="#{xyz.name}" />
          <a4j:ajax event="selectitem" render="input" />            
        </rich:select>
        </div>        
      </h:panelGroup>

再レンダリングする外部要素を定義する属性を追加しようとしましたが、ID がコンポーネントの範囲内にないというエラー メッセージが表示されます。

複合コンポーネント:

<a4j:ajax event="change" render="select #{cc.attrs.render}" />  

定義:

<xyz:selct ... render="idA idB" />

また、インターフェイスで clientBehavior を公開することで、それに を渡そうとしました。

複合コンポーネント インターフェイス:

<composite:clientBehavior name="change" event="action" /> 

定義:

<xyz:select ..>
   <a4j:ajax event="change" rerender="idA idB" />
</xyz:select>

ただし、これはコンポーネントのすべての ajax 機能を停止するだけです。

BalusC からの提案 (ありがとう) の後、次のことを試しました。

<composite:interface>
...
<composite:clientBehavior name="change" event="action" targets="input select"/>  
</composite:interface>

そして、次のAJAXタグを渡そうとしました:

<a4j:ajax event="change" render="idA idB" oncomplete="alert('tada');" />

残念ながら、指定されたアクションは実行されません。

4

1 に答える 1