struts2中的一个疑惑?
在Action定义一个私有属性并设置set get方法:
private String hello="hello silenceper!";
public void setHello(String hello){
this.hello=hello;
}
public String getHello(){
return hello;
}
可以在jsp页面中通过EL表达式和struts2标签来获取属性的值: <s:property value="hello"/>
或者 ${requestScope.hello}
但是如果设置属性为public 并且 不设置set get方法的话,还是可以通过上面两中方法来获取。
这是为什么?
还有就是属性怎么到requestScope中去了?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
通过反射 (java.reflect) 即可遍历和获取对象的属性和方法,Struts 可以在发现指定命名的属性而未发现getter方法时直接返回该属性的值,如果有对应的getter方法则调用方法获取。
可参考我的代码理解(这个代码比较简单):
https://github.com/ihongs/HongsCORE/blob/develop/src/java/app/hongs/action/Action.java#L108
第108行开始,通过给定的类和方法名实例化类并执行相应方法。此类为根据URL自动执行对应的类中的方法。
另外补充点,由于java修饰符的限制,无法获取一个外部类的private的属性,故你将属性声明为private的而又不提供getter方法(注意,getter方法也不能是private的),他当然也就没法获取了。
requestScope 是 request.getAttribute 的等价形式,在解析 ${requestScope.xxx} 时调用 request.getAttribute("xxx") 获取。