Properties getter不';在Struts 2中从textfield转换为property时不起作用

Properties getter不';在Struts 2中从textfield转换为property时不起作用,properties,nullpointerexception,struts2,textfield,Properties,Nullpointerexception,Struts2,Textfield,我在Struts 2中有一个定义为 <s:textfield key="fName" label="First Name" readonly="true" /> 堆栈跟踪: test.model.Person.getFName(Person.java:43) test.service.PersonDAO.update(PersonDAO.java:182) test.action.UpdatePersonInfo.execute(UpdatePersonInfo.java:46)

我在Struts 2中有一个定义为

<s:textfield key="fName" label="First Name" readonly="true" />
堆栈跟踪:

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

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

 public String getfName() {
        return fName;
    }

@添加了Aleksandr M getter和相关stacktrace。就像我说的,如果我用textfield替换属性,就没有NPE了。你是说你在提交表单后得到了NPE?使用隐藏字段。也请阅读此内容。@user1005585但值为空是否正确(如果使用文本字段)?如果是这样的话。。。然后使用类似于user is not loggin in[提供登录链接]的东西,尽管这有点不正常,但我会将检查移动到getter,如果那里为null,则返回一个空字符串。@Quaternion该值不是空的。始终存在一个值,它与textfield元素一起工作,但与property不一起工作。我在struts 2.3.15上。谢谢你的建议,只是为了一个理智的测试,你能改变
返回fName
返回“Bob”?您是否也在使用ModelDriven?有点奇怪。谢谢,我试过这个。它仍然会在表单提交时使用property元素抛出一个NPE,但不会使用textfield元素。你调试过action类吗?是的,我调试过textfield和property元素。与textfield一起使用时,getter返回一个值。但对于属性,该值似乎不是自动填充的,因此是NPE。@user1005585请重试,谢谢。不幸的是,%{fName}也会导致NPE。我想我现在会使用textfield/readonly,然后当我有机会的时候,我会升级到2.5.x,希望会更好!
test.model.Person.getFName(Person.java:43)
test.service.PersonDAO.update(PersonDAO.java:182)
test.action.UpdatePersonInfo.execute(UpdatePersonInfo.java:46)
 public String getfName() {
        return fName;
    }