[英]Struts 2: Incorrect/misspelled getter and setter name of a field
我已经在Struts 2 modelbean中将布尔变量声明为isABooleanValue
,并且可以通过在jsp中使用此modelbean.aBooleanValue
来查看该值。
吸气剂看起来像这样
public boolean isABooleanValue(){
return isABooleanValue;
}
二传手看起来像这样
public void setABooleanValue(boolean isABooleanValue){
this.isABooleanValue=isABooleanValue;
}
JSP代码
<s:property value="modelbean.aBooleanValue" />
任何人都可以解释如何从值堆栈中访问不正确的变量名称。
编辑
解
JSP中的using属性基于指定的Getter方法。 modelbean.aBooleanValue
调用在您的Model Bean中定义的isABooleanValue()
方法,因此不依赖于私有字段名称。
更新:-尽管这似乎在OGNL的较早版本中起作用,但是与Struts2捆绑在一起的OGNL 3.0.11版(OgnlRuntime)可能会导致在字段名称的getter和setter不同时显示空白值。
如前所述,Aleksandr M的变量名称具有private
修饰符。 它从Struts OGNL隐藏该变量。 当OGNL评估表达式时,它总是在寻找可用于该名称的对象访问器。 其中,它使用一种更适合的方法来获取被评估密钥的值。
如果变量名具有public
访问器,则使用该变量的名称。 如果它是一个方法访问器,那么它将根据方法名称来计算名称。
例如,如果您有一个方法
public boolean isABooleanValue(){
return isABooleanValue;
}
OGNL可以访问带有aBooleanValue
和ABooleanValue
的名称。 它返回什么都无关紧要,但它应该是一个boolean
值。
不建议将此类方法映射到操作,因为您可能会通过OGNL调用或序列化过程遇到不必要的操作调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.