4

複合コンポーネントを作成し、いくつかのバリデーターをその子にアタッチしたいのですが、検証からのメッセージをその子ではなく複合コンポーネントにアタッチしたいです。

複合コンポーネントを使用するページでは、次のようなものが必要です。

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

メッセージは複合コンポーネント自体ではなく、コンポーネントの子に対するものであるため、機能しません。コンポーネント全体の作り方は?

またはさらに良いことに、次のようにバリデーターを複合コンポーネントに追加したいと思います。

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

そして、複合コンポーネント内に要素があるため、値としてブール値配列のようなものを受け取りh:selectBooleanCheckboxます。それは可能ですか?

4

2 に答える 2

1

複合定義内に次のコードを配置する必要があります

      <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>
于 2011-12-14T21:30:36.107 に答える
1

この質問への回答は非常に遅いかもしれませんが、これが私がすべき方法です。

<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) に配置されるようにします。

于 2011-12-09T13:36:27.173 に答える