首页 > struts2中的一个疑惑?

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


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

【热门文章】
【热门文章】