1

カスタム アノテーション 'T9n' を使用して、クラス プロパティに文字列ラベルでアノテーションを付けたいと考えています。プロパティへの弱い参照を持つ messages.properties ファイルを参照するよりも、むしろこれを行います (JSP ページで定義されたばかりです)。私は次のようなことをしたいと思います:

注釈:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface T9n {
    String value();
}

クラス:

public class MyClass {

    @T9n("My Variable")
    private String variableName;
}

JSP (Spring 形式の JSTL タグ):

<form:label path="variableName"><!-- Access T9n annotation here --></form:label>
<form:input path="variableName" />

これは可能ですか?現時点での私の考えは、カスタム JSP タグを使用して何かを行うことです。検索しても何も見つかりません。

4

1 に答える 1

1

最後にカスタムタグを実装しました。ここで手順を定義する良い記事を見つけました:

http://www.codeproject.com/Articles/31614/JSP-JSTL-Custom-Tag-Library

T9n 値を取得するための私の Java コードは次のとおりです。

public class T9nDictionaryTag extends TagSupport {

    private String fieldName;
    private String objectName;

    public int doStartTag() throws JspException {
        try {
            Object object = pageContext.getRequest().getAttribute(objectName);
            Class clazz = object.getClass();
            Field field = clazz.getDeclaredField(fieldName);

            if (field.isAnnotationPresent(T9n.class)) {
                T9n labelLookup = field.getAnnotation(T9n.class);
                JspWriter out = pageContext.getOut();
                out.print(labelLookup.value());
            }

        } catch(IOException e) {
            throw new JspException("Error: " + e.getMessage());
        } catch (SecurityException e) {
             throw new JspException("Error: " + e.getMessage());
        } catch (NoSuchFieldException e) {
             throw new JspException("Error: " + e.getMessage());
        }       
        return EVAL_PAGE;
    }

    public int doEndTag() throws JspException {
        return EVAL_PAGE;
    }

    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }

    public void setObjectName(String objectName) {
        this.objectName = objectName;
    }
}

したがって、私のJSPでは次のようになります。

<form:label path="variableName"><ct:t9n objectName="myObject" fieldName="variableName" /></form:label>
<form:input path="variableName" />

これがいつか他の誰かに役立つことを願っています

@Holger - 埋め込み Java コードを使用することもできましたが、これは見た目が煩雑で、プレゼンテーション レベルの分離には適していません。

于 2013-10-22T10:50:32.410 に答える