사용자 정의 UIComponent
을 작성하고 그 안에 요소 (및 기타 주식 UIComponent)를 추가합니다. 구성 요소가 렌더링되지만 ViewRoot
에서 찾을 수 없습니다. 같은 것을 추가JSF 2.0 : UIComponents와 그 내용을 추가하여 루트를 보는 방법은 무엇입니까?
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");
}
:이 확인 렌더링
<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?
의 내가 있다고 가정 해 봅시다
다른 UIComponents를 사용자 정의 구성 요소의 하위 요소로 추가하려고하면 동일한 문제가 발생합니다. 그러나 사용자 구성 요소 자체가 거기에 있지 않기 때문에 구성 요소 트리에서 찾을 수 없습니다.
구성 요소 트리에 구성 요소를 가져 오려면 어떤 트릭이 필요합니까?
편집 : 질문을보다 잘 반영하도록 제목을 조정했습니다.
음, 맞습니다. getClientId (컨텍스트)는 실제로 JSF 생성 ID (이 경우 "j_id11")를 반환합니다. 자동으로 생성 된 ID를 setId()를 통해 UIComponents로 수동으로 대체해야합니다. 생성 된 ID는이 경우에 접두어를 가지지 않지만, 필자가 직접'h : body'에서 구성 요소를 호출합니다. 어쨌든, 커스텀 UIComponent를 어떻게 추가하여 컴포넌트 트리에 추가 할 수 있습니까? (예를 들어, AJAX 호출을 통해 다시 렌더링 할 수 있도록) 그게 가능하지 않다면 UIComponent 내부에 하위 요소를 추가하여 구성 요소 트리에 추가 할 수 있습니까? –
입력 해 주셔서 감사합니다. 문제점을 발견했습니다 (내 답변 참조). 나는 이것이 심지어 그 질문에서 볼 수없는 무엇인가라고 생각한다. 나는 다음에 더 조심하려고 노력할 것이다! –