当我显示名称为user_id的属性时,它完美呈现。但是,如果我想显示像“User_id”这样的值,它会提示无法找到属性(NOMETHODFOUND EXCEPTION)
以及不适当的OGNL表达:(d - 49216) - s
答案 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 Conventions和CamelCase 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等等......