2012-09-26 2 views
3

Seam 태그 <s:decorate>을 사용 중이며 enclose 속성이 있습니다. 기본적으로 true으로 설정되어 있습니다 (HtmlDecorate 클래스에서 볼 수 있습니다).Seam의 태그 기본 속성 값 변경

내 응용 프로그램에서는 모든 태그를 묶어서는 안되기 때문에 각 태그의 속성을 false으로 설정해야합니다. 하지만 각 태그에 지정하는 것은 매우 아름다운 해결책은 아닙니다.

기본값 enclose = truefalse으로 변경하고 싶습니다. 주입이나 다른 방법으로 가능합니까?

답변

4

내가 발견 한 유일한 방법은 Seam의 decorate 구성 요소를 귀하의 것으로 오버라이드하는 것입니다. 복잡하게 들리지만 상대적으로 간단하며 <s:decorate/>enclose="false"을 써야하는 것보다 낫습니다. 이 솔루션은 프로젝트의 faces-config.xml에있는 구성 요소 정의가 라이브러리 jar 내에있는 faces-config.xml 파일에있는 정의보다 우선합니다.

HtmlDecorate 확장 사용자 정의 컴포넌트 클래스 만들기 : 사용하는 동안, 우리는 <component-class /> 태그에 사용자 정의 구성 요소 클래스를 지정하여 faces-config.xml (주에서

public class MyDecorate extends HtmlDecorate { 

    // Default value is false, as opposed to HtmlDecorate 
    private boolean _myenclose = false; 

    // Default constructor 
    public MyDecorate() { 
     super(); 
    } 

    // Override setEnclose() and isEnclose() so that they use your variable 
    public boolean isEnclose() { 
     return _myenclose; 
    } 
    public void setEnclose(boolean enclose) { 
     this._myenclose = enclose; 
    } 
} 

가 장식 구성 요소의 클래스로 클래스 선언을, 일반적인 심 렌더러) :

<component> 
    <description>"Decorate" a JSF input field when validation fails or when required="true" is set.</description> 
    <component-type>org.jboss.seam.ui.Decorate</component-type> 
    <component-class>com.example.myapp.MyComponent</component-class> 
    <component-extension> 
     <component-family>org.jboss.seam.ui.Decorate</component-family> 
     <renderer-type>org.jboss.seam.ui.DecorateRenderer</renderer-type> 
    </component-extension> 
</component> 

귀하의 페이지에 평소처럼 <s:decorate/> 태그를 사용

<s:decorate template="..."> 
    .... 
</s:decorate> 
+0

멋지다! 나는 Seam 컴포넌트 디스크립터를 사용하여 그것을 덮어 쓰려고했으나 작동하지 않았다. 고맙습니다 :) –