struts2中的一个疑惑?

发布于 2022-08-27 12:05:07 字数 480 浏览 10 评论 0

在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浪推晚风 2022-09-03 12:05:07

通过反射 (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") 获取。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文