我已在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字段名称不相同时显示空白值。
答案 0 :(得分:2)
如上所述Aleksandr M,变量名称具有private
修饰符。它隐藏了Struts OGNL的变量。当OGNL正在评估表达式时,它总是在寻找可用于名称的对象访问器。其中,它使用一个更适合获得被评估密钥的值。
如果变量名称具有public
访问者,则使用此变量的名称。如果它是方法访问器,则它从方法名称计算名称。
例如,如果您有方法
public boolean isABooleanValue(){
return isABooleanValue;
}
OGNL可以访问aBooleanValue
和ABooleanValue
的名称。它返回的内容并不重要,但它应该是boolean
值。
不建议将此类方法映射到操作,因为您可能会通过OGNL调用或序列化期间遇到不必要的操作调用。