2014-01-17 4 views
2

JSF에서 사용자 정의 구성 요소를 작성하고 이미 작성했습니다. 이제 XHTML 파일에서 사용하는 해당 사용자 정의 태그에 대한 속성을 작성하여 필수로 작성하려고합니다. UIOutput 클래스에서 확장 된 MyJSFComponent 구성 요소를 만들었습니다. 특정 속성을 어떻게 위임 할 수 있습니까?jsf 필수 구성 요소를 선언하는 사용자 정의 구성 요소

답변

2

UIComponent 쪽에서는하지 말고 .taglib.xml 또는 TagHandler 쪽에서하십시오.

.taglib.xml 파일에서 <required>true</required> 항목을 속성에 추가하기 만하면됩니다.

<attribute> 
    <name>foo</name> 
    <required>true</required> 
    <type>java.lang.String</type> 
</attribute> 

그러나 오류가 발생하는지 여부는 도구 (편집기)에 따라 결정됩니다. JSF/Facelets은 런타임 중에 체크하지 않습니다. 예를 들어 Eclipse는 편집기에서 태그를 자동 완성 할 때 자동으로 속성을 인라인합니다. 그러나 나중에 제거 할 수 있으며 오류없이 실행됩니다.

보다 강화 된 실행은 클래스를 사용합니다.이 클래스는 부재시에는 TagException을 던지는 getRequiredAttribute() 메서드를 제공합니다. 다음과 같이 다음 .taglib.xml 파일이 핸들러를 등록 할 수 있습니다 :

<component> 
    <component-type>com.example.SomeComponent</component-type> 
    <handler-class>com.example.SomeComponentHandler</handler-class> 
</component> 

그에 핸들러 클래스는 기본적으로 다음과 같이 :

public class SomeComponentHandler extends ComponentHandler { 

    public SomeComponentHandler(ComponentConfig config) { 
     super(config); 
     getRequiredAttribute("foo"); 
    } 

} 

이 속성의 존재에 실제 런타임 검사를 수행합니다.

+0

현재 일부 값을 렌더링하기 위해 UIOutput을 사용하고 있습니다. 수 foo는 사실 이 UIOutput 구성 요소와 함께 사용할 수 java.lang.String의? – user2354566

+0

죄송합니다. 왜 그런 문제가 생길지 모르겠습니다. 너도 그걸 시도하지 않았다고 말하는거야? 왜 안돼? – BalusC

+0

발루 감사합니다. 나는 dhandler 클래스의 컴포넌트 타입이 같고 이것에 따라 변경을하고 있다고 생각했다. 마침내 내가 두 개의 다른 클래스를 가리킨다는 것을 깨달았을 때, 나는 그것을 성취한다. 지원을 위해 당신을 Thak. – user2354566

관련 문제