为什么Action的属性有时访问不到?

struts2.2.1 tomcat 6.0.35

有一个继承ActionSupport的HelloAction类,具有message和password两个属性,并添加了相应的GetMessage,SetMessage;SetPassword,GetPassword;方法,在execute()中执行了SetMessage("Hello"),SetPassword("no");

但在HelloAction.jsp中通过调用下面的代码,message属性能显示,可password属性却无法显示。
<h2>${message}, ${password}</h2>

哥们犯个低级性错误,get set 生成有问题
getPassword
纠正get set 方法,应该
this.message="Hello";
this.password="Hello";
setMessage("Hello"),setPassword("no");
2种jsp都可以显示的。

1、struts的action数据能被页面访问到:
AAction {
public String password;//public的字段可以被OGNL访问
}

AAction {
private String password;

public String getPassword() {//getter方法也可以访问
     return this.password; 
}

}

2、${password} 不作用域将按照如下顺序进行查找:
page---->request(原始request---->struts值栈的栈区----->struts值栈的上下文区)----->session----->application

你的action默认是在struts值栈的栈区的,按理说,如果按照【1】的配置方式是可以取到的。

3、问题
难道你的get方法写错了?
或者 【page---->request(原始request---->】这块用password 但是为空?

4、你可以通过s:debug 查看值栈
注:s:debug 将通过getter方法查找数据进行展示, public的字段是不展示的;

直接
this.message="Hello";
this.password="Hello";
还有一点,记得属性是private的

get/set方法写错了
getMessage(),setMessage()
首字母小写~~~

1.请确定你的get,set方法是否正确,如果确定正确,执行步骤2
2.在hello.jsp中引入<%@taglib prefix="s" uri="/struts-tags" %>
使用/s:debug标签查看是否正确,检查是否将password信息是否放置在相应的作用范围,确定问题。

检查范围依次为:
page---->request(原始request---->struts值栈的栈区----->struts值栈的上下文区)----->session----->application

你的action默认是在struts值栈的栈区的,按理说,如果按照【1】的配置方式是可以取到的。

直接用IDE自带的source生成工具生成setter和getter,(右键菜单Source选择generate getters and setters),可以避免手写代码函数名不符合struts要求的问题。

涉及到了封装的概念了,java中用private来对属性进行,使外界不可直接操作属性(安全问题);通过public声明一个外界可以访问的方法,规范写法为小写的get和set后面用驼峰标识 :)