3

Seam tag を使用<s:decorate>していencloseます。属性があります。デフォルトでは(クラスtrueで確認できます) に設定されています。HtmlDecorate

私のアプリケーションでは、すべてのタグを囲むべきではないため、属性をfalse各タグに設定する必要があります。しかし、各タグでそれを指定することは、あまり美しい解決策ではありません。

enclose = trueデフォルトをfalse1 か所に変更したいと思います。注射または他の方法で可能ですか?

4

1 に答える 1

4

私が見つけた唯一の方法は、Seam のdecorateコンポーネントをあなたのものでオーバーライドすることです。複雑に聞こえますが、実行するのは比較的簡単でenclose="false"、すべての<s:decorate/>. このソリューションは、プロジェクトにあるコンポーネント定義が、ライブラリ jar 内faces-config.xmlにあるファイルにある定義よりも優先されるという事実に依存しています。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;
    }
}

クラスをデコレート コンポーネントのクラスとして宣言します(通常の Seam レンダラーを使用しているときに、タグでfaces-config.xmlカスタム コンポーネント クラスを指定していることに注意してください)。<component-class />

<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>
于 2012-09-27T00:55:56.167 に答える