다른 이름 지정 컨테이너 내에서 일부 JSF 구성 요소를 처리 할 수 있습니다.다른 이름 지정 컨테이너의 구성 요소 주소 지정
Useecase : 복합 구성 요소에서 정의 된 필드에 대해 일부 기능을 캡슐화하는 복합 구성 요소.
일부 코드 :<form id="foo">
...
<label for="nameTxt">Name:</label>
<component:customError forField="nameTxt" />
<h:inputText id="nameTxt" />
...
</form>
및 구성 요소 : 내가 생각
Could not render Message. Unable to find component 'nameTxt' (calling findComponent on component 'j_id963445801_469fc056:errorMsg')
나는 문제가 이해 :
<composite:implementation>
<h:panelGroup id="errorComponent">
...
<h:message for="#{cc.attrs.forField}" id="errorMsg" style="display:none;" />
...
</h:panelGroup>
</composite:implementation>
문제는 메시지를 렌더링에 내가 얻을 수 있다는 것입니다 사실 "nameTxt"필드와 "errorMsg"메시지는 다른 명명 컨테이너에 있습니다. 그래서 내가해야 할 일은 공통 조상과 관련하여 "nameTxt"의 경로/id를 지정하는 것입니다.
알고리즘을 공부 한 후 UIComponentBase:findComponent 루트 (예 : ": foo : ... : nameTxt")에서 전체 (절대) id-path를 지정하는 것보다 교차 명명 컨테이너를 직접 찾는 방법이 실제로 표시되지 않습니다. . 그리고 이것은 페이지 구조를 변경 한 후에 오류가 발생하기 쉬울뿐만 아니라 서투른 모양입니다.
- 어떻게 "nameTxt"라는 필드를 복합 컴포넌트의 메시지에서 올바르게 처리 할 수 있습니까?
사용중인 JSF impl/version은 무엇입니까? 나는 Mojarra 2.1.4에서 이것을 재현 할 수 없다. – BalusC
그것은 MyFaces 2.1.2입니다. 하지만 잘못하지 않았다면 findComponent의 해상도 알고리즘에서 직접 가져옵니다. 따라서 여기서 또 다른 접근법이 필요합니다. 그러나 그것은 당신을 위해 작동합니까? 즉, 명명 컨테이너 경로가없는 일반 ID 만 사용하여 다른 구성 요소를 참조 할 수 있습니까? –