繁体   English   中英

在Seam中更改标记默认属性的值

[英]Change tag default attribute's value in Seam

我使用的是Seam标签<s:decorate> ,它有一个enclose属性。 默认情况下,它设置为true (您可以在HtmlDecorate类中看到它)。

在我的应用程序中,不应包含所有标记,因此应在每个标记上将属性设置为false 但要在每个标签上指定它并不是很漂亮的解决方案。

我想在一个地方将默认的enclose = true更改为false 是否有可能通过注射或其他方式?

我找到的唯一方法是用你的覆盖Seam的decorate组件。 虽然听起来很复杂,但实现起来相对简单,并且比在每个<s:decorate/>编写enclose="false"更好。 此解决方案依赖于以下事实:位于项目faces-config.xml中的组件定义优先于位于库jar中的faces-config.xml文件中的定义。

创建扩展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中将您的类声明为decorate组件的类(请注意,我们在<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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM