私はカスタムUIComponent
を構築しており、その中に要素(および他のストックUIComponent)を追加しています。コンポーネントは表示されますが、ViewRoot
からは見つかりません。することを追加JSF 2.0:UIComponentとその内容を追加してルートを表示する方法は?
ResponseWriter writer;
@Override
public void encodeBegin(FacesContext context) throws IOException {
writer = context.getResponseWriter();
writer.startElement("div", this);
writer.writeText("testing", null);
writer.writeAttribute("id", getClientId(context) + ":testDiv", null);
}
@Override
public void encodeEnd(FacesContext context) throws IOException {
writer.endElement("div");
}
::これはOKレンダリング
<x:myUiComponent id="myComponent" />
、しかし私はコンポーネントを見つけることができないか、それがViewRootから、子のdivです:
context.getViewRoot().findComponent("myComponent"); // returns null
context.getViewRoot().findComponent("myComponent:testDiv"); // returns null
findComponent("myComponent:testDiv"); // called within the custom component, throws java.lang.IllegalArgumentException?
のは、私が持っているとしましょう
他のUIComponentをカスタムコンポーネントの子として追加しようとすると、同じ問題が発生します私のカスタムコンポーネント自体は存在しないので、コンポーネントツリーからは見つかりません。
ここでコンポーネントをコンポーネントツリーに入れるにはどのようなトリックですか?
:質問をよく反映するようにタイトルを調整しました。
実際、getClientId(context)はJSF生成ID(この場合は "j_id11")を返します。 UIComponentsで(setId()経由で)自動的に生成されたIDを手動でオーバーライドする必要があると思います。生成されたIDには、この場合は接頭辞がありません。私は 'h:body'から直接コンポーネントを呼び出します。とにかく、カスタムUIComponentを追加して、それ自体がコンポーネントツリーに追加されるようにするにはどうすればいいですか?(たとえば、AJAX呼び出しで再レンダリングできるように)それが不可能な場合、UIComponent内のサブ要素を追加してコンポーネントツリーに追加するにはどうすればよいですか? –
あなたのご意見ありがとう、私は問題を見つけました(私の答えを見てください)。私はこれが質問から見えないものであったと思う。私は次回より注意しようとします! –