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;
}
具有 aBooleanValue
和 ABooleanValue
的名称可以被 OGNL 访问。 returns 是什么并不重要,但它应该是 boolean
值。
不建议将此类方法映射到操作,因为您可能会通过 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()
方法,因此不依赖于私有字段名称。
更新:- 虽然这似乎适用于旧版本的 OGNL,但与 Struts2 捆绑在一起的 OGNL 版本 3.0.11 (OgnlRuntime) 可能会导致在 getter 和 setter 字段时显示空白值名字不一样。
如 Aleksandr M 所述,变量名有一个 private
修饰符。它隐藏了来自 Struts OGNL 的变量。当 OGNL 正在评估一个表达式时,它总是在寻找可用于该名称的对象访问器。其中它使用一个更适合的值来获取正在评估的键的值。
如果一个变量名有一个 public
访问器,它正在使用这个变量的名称。如果它是一个方法访问器,那么它会根据方法名称计算出一个名称。
例如,如果你有一个方法
public boolean isABooleanValue(){
return isABooleanValue;
}
具有 aBooleanValue
和 ABooleanValue
的名称可以被 OGNL 访问。 returns 是什么并不重要,但它应该是 boolean
值。
不建议将此类方法映射到操作,因为您可能会通过 OGNL 调用或在序列化期间遇到不必要的操作调用。