【问题标题】:getter doesn't work when converted from textfield to property in Struts 2在 Struts 2 中从文本字段转换为属性时 getter 不起作用
【发布时间】:2017-06-27 17:27:21
【问题描述】:

我在 Struts 2 中有一个文本字段定义为

<s:textfield key="fName" label="First Name" readonly="true" />

getter 工作正常,但由于它应该只是一个仅显示字段,所以我将其更改为

<div> <br /> First Name: <s:property value="fName" /></div>

现在 getter 得到 NullPointerException。

有没有办法规避这个错误?谢谢

Person.java 中的 getter:

public String getFName() {
 return fName;
}

堆栈跟踪:

test.model.Person.getFName(Person.java:43)
test.service.PersonDAO.update(PersonDAO.java:182)
test.action.UpdatePersonInfo.execute(UpdatePersonInfo.java:46)

【问题讨论】:

  • @Aleksandr M getter 和相关的堆栈跟踪已添加。就像我说的,如果我用文本字段替换属性,就没有 NPE
  • 你的意思是你提交表格后得到NPE?使用隐藏字段。另请阅读此struts.apache.org/docs/…
  • @user1005585 但该值为空正确(如果使用文本字段)?如果是这样的话......然后使用类似 user is not已登录[提供登录链接],虽然这有点 hack,但我会将检查移至 getter,如果那里为 null,则返回一个空字符串。
  • @Quaternion 值不为空。总是有一个值,它适用于 textfield 元素,但不适用于属性。我正在使用 struts 2.3.15。不过感谢您的建议
  • 只是为了进行健全性测试,您可以将return fName; 更改为return "Bob"; 吗?你也在使用 ModelDriven 吗?有点奇怪。

标签: properties nullpointerexception struts2 textfield


【解决方案1】:

你必须小心选择类变量名,在你的例子中是 fName。使用新版本的 OGNL 的新版本 struts 2,一些 getter/setter 不能正常工作。这是因为较新的 OGNL 遵循 Java bean 规范。所以你的吸气剂将是

 public String getfName() {
        return fName;
    }

【讨论】:

  • 谢谢,我试过了。而且它仍然会在表单提交时使用属性元素引发 NPE,但不会使用 textfield 元素。
  • 由于您使用的是 struts 2.3.15,因此您的 getter 方法是正确的。你调试过你的动作类吗?
  • 是的,我对文本字段和属性元素都做了。当与文本字段一起使用时,getter 返回一个值。但是对于属性,就像值不会自动填充,因此是 NPE。
  • @user1005585 试试这个
  • 再次感谢。不幸的是,%{fName} 也会导致 NPE。我想我现在要使用 textfield/readonly,然后当我有机会时,我会升级到 2.5.x 并希望变得更好!
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2017-08-22
相关资源
最近更新 更多