java - struts2中的一个疑惑?
PHP中文网
PHP中文网 2017-04-17 11:16:10
[Java讨论组]

在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中去了?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(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") 获取。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号