2010-12-02 14 views
4

コンポジットコンポーネントを作成し、その子にいくつかのバリデータを添付したいのですが、子コンポーネントではなく、コンポジットコンポーネントにメッセージを添付して検証します。メッセージは、コンポーネントの子のためではない複合コンポーネント自体であるので、JSFコンポジットコンポーネントの検証

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

は、今では動作しません:複合コンポーネントを使用したページで

は、私はこのような何かをしたいです。全体のコンポーネントのためにそれを作る方法?

またはより良い、私は次のように、複合コンポーネントにバリデータを追加したい:

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

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

答えて

1

この質問に応答することがたぶん非常に遅れたが、これは、私はそれを行うべきかです:

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

doValidationは、その後「コンテナ」でチャイルズの検証後に呼び出されます。

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

そして、あなたはその方法では2つのオプションがあります:このような方法llooks

  • アクセス子コンポーネント(event.getComponentを()GetChildrenメソッド()。)、あなたがしたいものは何でもそれらの子どもたちに提出された値で行う。

  • またはループfacesMessagesのオーバー、彼らはあなたのコンテナコンポーネントの上に置かれるようにのclientIdを再割り当て(ID =私)

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> 
関連する問題