【问题标题】:Struts 2: Incorrect/misspelled getter and setter name of a fieldStruts 2:字段的错误/拼写错误的getter和setter名称
【发布时间】:2016-04-28 09:01:56
【问题描述】:

我在 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 不同时显示空白值。

【问题讨论】:

  • 这有什么不妥之处?
  • 我们能得到真正的代码sn-ps吗?你的二传手不会那样工作。
  • 仍然不确定您的问题是什么。也许这个链接会对你有所帮助 - issues.apache.org/jira/browse/WW-4462.
  • 你的变量是private,在jsp中访问它时会调用getter。
  • @yeppe 您可以阅读它如何更好地工作stackoverflow.com/a/28110630/573032

标签: java struts2 ognl


【解决方案1】:

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

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

例如,如果你有一个方法

public boolean isABooleanValue(){
     return isABooleanValue;
}  

OGNL 可以访问带有aBooleanValueABooleanValue 的名称。它返回什么并不重要,但它应该是一个boolean 值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    相关资源
    最近更新 更多