2013-10-22 61 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代碼,但這看起來很亂,不適合演示級別的分離。

相關問題