ページの開発を容易にするために、いくつかの Facelets を作成しました。特に、入力コンポーネント用に一連の Facelets を作成しました。<xxx:input />
入力フィールドの周りにラベルを表示するFaceletが1つあります。それを超えて、実際の入力フィールドをレンダリングするような Facelets が<xxx:inputText />
あります。<xxx:inputSecret />
これらはそれぞれ、 を使用<xxx:input />
してラベルを表示します。Facelet は次のようになります。
<html ...>
<composite:interface>
...
</composite:interface>
<composite:implementation>
<label><h:outputText value="#{cc.attrs.labelText}" /></label>
<composite:insertChildren />
</composite:implementation>
</html>
Facelet は次の<xxx:inputText />
ようになります...
<html ...>
<composite:interface>
...
</composite:interface>
<composite:implementation>
<xxx:input labelText=...>
<h:inputText id="myinput" ... />
</xxx:input>
</composite:implementation>
</html>
<f:validator />
すべてが正常にレンダリングされますが、またはその他の検証タグを追加しようとすると問題が発生します。私が読んだことから、Facelet にタグを追加する必要があります。それで、<composite:editableValueHolder name="myinput" targets="myinput" />
インターフェイスセクションに行を追加しました。ただし、バリデーターが起動されていることはまだわかりません。私は.xhtmlファイルにこのようなものを持っています...
...
<xxx:inputText value="...">
<f:validateLength minimum="10" for="myinput" />
</xxx:inputText>
...
入力内容に関係なく、バリデーターが起動することはなく、エラー メッセージも表示されません。同僚は、私が使用しているターゲット ID と、<xxx:input />
Facelet によってラップされているという事実が原因であると示唆しました。
ターゲット定義に親コンポーネント ID を組み込む必要がありますか? 私が見逃しているものは他にありますか?<xxx:input />
Faceletを除外すれば問題なく動作するので、それが関係しているのではないかと推測していますが、解決方法がわかりません。あなたが提供できるどんな助けも大歓迎です。