Struts 2:字段的错误/拼写错误的getter和setter名称

时间:2016-04-28 09:01:56

标签: java struts2 ognl

我已在Struts 2 modelbean中将一个布尔变量声明为isABooleanValue,我可以在jsp中使用此modelbean.aBooleanValue来查看该值。

getter看起来像这样

public boolean isABooleanValue(){
     return isABooleanValue;
}

setter看起来像这样

public void setABooleanValue(boolean isABooleanValue){
     this.isABooleanValue=isABooleanValue;
}

Jsp代码

<s:property value="modelbean.aBooleanValue" />

任何人都可以解释如何从值堆栈中访问不正确的变量名称。

修改

解决方案

在JSP中使用属性基于指定的Getter方法。 modelbean.aBooleanValue调用模型Bean中定义的isABooleanValue()方法,因此不依赖于私有字段名称。

similar question

更新: - 虽然这似乎可以在旧版本的OGNL中使用,但与Struts2捆绑在一起的OGNL 3.0.11版(OgnlRuntime)可能会导致当getter和setter字段名称不相同时显示空白值。

1 个答案:

答案 0 :(得分:2)

如上所述Aleksandr M,变量名称具有private修饰符。它隐藏了Struts OGNL的变量。当OGNL正在评估表达式时,它总是在寻找可用于名称的对象访问器。其中,它使用一个更适合获得被评估密钥的值。

如果变量名称具有public访问者,则使用此变量的名称。如果它是方法访问​​器,则它从方法名称计算名称。

例如,如果您有方法

public boolean isABooleanValue(){
     return isABooleanValue;
}  

OGNL可以访问aBooleanValueABooleanValue的名称。它返回的内容并不重要,但它应该是boolean值。

不建议将此类方法映射到操作,因为您可能会通过OGNL调用或序列化期间遇到不必要的操作调用。