내가 발견 한 유일한 방법은 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>
멋지다! 나는 Seam 컴포넌트 디스크립터를 사용하여 그것을 덮어 쓰려고했으나 작동하지 않았다. 고맙습니다 :) –