2013-10-22 36 views
1

我想使用自定义注释'T9n'来用String标签注释类属性。我宁愿这样做,也不愿意引用对该属性具有弱引用的messages.properties文件(只在JSP页面中定义)。我想这样做:是否有可能访问JSP中的方法注释

译注:

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

类:

public class MyClass { 

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

JSP(春季形式JSTL标签):

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

这可能吗?我现在的想法是用自定义的JSP标签做一些事情,我找不到任何东西。

+0

据我所知,您可以在JSP中嵌入任何Java代码,因此您应该能够嵌入如果JSP不涉及的情况下使用的直接代码。 – Holger

+0

@Holger在JSP中嵌入Java(即scriptlets)通常被认为是不好的做法。 –

回答

1

我在最后实现了一个自定义标签。我发现了一个很好的文章在这里定义的步骤:

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

我的Java代码来获得T9n值:

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 - I本来可以使用嵌入式Java代码,但这看起来很乱,不适合演示级别的分离。

相关问题