我正在使用 Seam 标签<s:decorate>
,它有一个enclose
属性。默认情况下,它设置为true
(您可以在HtmlDecorate
课堂上看到它)。
在我的应用程序中,不应包含所有标签,因此应将属性设置为false
每个标签。但是在每个标签上都指定它并不是很漂亮的解决方案。
我想将默认设置更改为enclose = true
一false
处。是否有可能通过注射或其他方式?
我发现的唯一方法是decorate
用你的覆盖 Seam 的组件。虽然听起来很复杂,但实现起来相对简单,而且比必须enclose="false"
在每个<s:decorate/>
. 该解决方案依赖于这样一个事实,即位于项目中的组件定义faces-config.xml
优先于faces-config.xml
位于库 jar 内的文件中的定义。
创建扩展的自定义组件类HtmlDecorate
:
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;
}
}
将您的类声明为装饰组件的类,在您的faces-config.xml
(请注意,我们在<component-class />
标签中指定您的自定义组件类,同时使用通常的 Seam 渲染器):
<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>