1
回答
Struts2中prepare方法里面定义的变量为何能用EL取出?

struts2里面使用的paramsPrepareParamsStack拦截器栈,然后action类实现了Preparable接口。

现在此action类中的prepare方法里面定义一个变量disease="ABC";

为什么能在jsp里面用EL表达式取出呢?

是哪个拦截器把它放入到了ActionContext中或哪个域对象中吗?

举报
Euray
发帖于4年前 1回/217阅
共有1个答案 最后回答: 4年前

明白了,Action被放入值栈,所以属性disease暴露在了值栈里面,通过OGNL表达式去取值栈中的disease属性就取到了。类似EL的写法(${})是取得值栈中对象栈栈顶的属性,从顶往下依次取值。

注意到两点:

1,这里是OGNL而不是EL;

2,属性必须有setter和getter方法才称之为属性,否则不会暴露在值栈中。

请求发起时struts容器创建了Action对象并放入值栈中,此操作在拦截器执行之前。

顶部