Struts2中的displaytag无法找到大写首字母的属性

时间:2012-11-21 06:56:05

标签: struts2 displaytag ognl

当我显示名称为user_id的属性时,它完美呈现。但是,如果我想显示像“User_id”这样的值,它会提示无法找到属性(NOMETHODFOUND EXCEPTION)

以及不适当的OGNL表达:(d - 49216) - s

1 个答案:

答案 0 :(得分:0)

这与Struts2无关,并且与DisplayTag无关。

这是关于OGNL和JavaBeans命名约定。

JavaBeans PDF by SUN中所述,

  

8.3属性的设计模式

     

8.3.1简单属性

     

默认情况下,我们使用设计模式通过查找表单的方法来定位属性:

public <PropertyType> get<PropertyName>();
public void set<PropertyName>(<PropertyType> a);
     

如果我们发现一对匹配的“get<PropertyName>”和。{   然后,获取和返回相同类型的“set<PropertyName>”方法   我们将这些方法视为定义其名称的读写属性   将是“<propertyName>”。我们将使用“get<PropertyName>”   获取属性值的方法和“set<PropertyName>”方法   设置属性值。这对方法也可以位于   在同一个类中,或者一个可以在基类中,另一个可以在基类中   在派生类中。

     

如果我们只发现其中一种方法,那么我们将其视为定义   要么是只读,要么是只写“<propertyName>”

的属性      

默认情况下,我们假设属性既不受约束也不受约束   (见第7节)。

     

所以一个简单的读写属性“foo”可能是   用一对方法表示:

public Wombat getFoo();
public void setFoo(Wombat w);
     

8.3.2布尔属性

     

此外,对于布尔属性,我们允许匹配的getter方法   模式:

public boolean is<PropertyName>();
     

可以提供此“is<PropertyName>”方法而不是a   “get<PropertyName>”方法,或者除了a之外还可以提供   “get<PropertyName>”方法。

     

在任何一种情况下,如果是   对于布尔属性,我们存在“is<PropertyName>”方法   将使用“is<PropertyName>”方法读取属性值。   布尔属性的示例可能是:

public boolean isMarsupial();
public void setMarsupial(boolean m);

请阅读Java Naming ConventionsCamelCase practice


那就是说,你的属性user_id(应按约定userId命名)有一个类似public String getUser_id()的getter(如果它是一个String,但ID不应该是串);

这意味着您可以使用&#34; user_id&#34;从OGNL获取,而不是使用&#34; User_id&#34 ;.

如果您要尝试实现的结果是将user_id变量的CONTENT大写, 然后你应该采用另一种方式(另一种具有大写结果的getter,如getUser_idCapitalized,或者从OGNL到Apache的一个函数,如WordUtils.capitalize(str),如described here等等......