Struts 2: Incorrect/misspelled getter 和 setter 字段名称

Struts 2: Incorrect/misspelled getter and setter name of a field

我在 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() 方法,因此不依赖于私有字段名称。

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

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

如果一个变量名有一个 public 访问器,它正在使用这个变量的名称。如果它是一个方法访问器,那么它会根据方法名称计算出一个名称。

例如,如果你有一个方法

public boolean isABooleanValue(){
     return isABooleanValue;
}  

具有 aBooleanValueABooleanValue 的名称可以被 OGNL 访问。 returns 是什么并不重要,但它应该是 boolean 值。

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