关于 struts2 的 value stack

    咱们都知道,struts 能够在action中绑定数据,进而在页面中经过s 标签,ognl表达式输出。session

    关于 value stack以及 action contextapp

        用 <s:debug/> 能够查看 value stack 以及 action context, 很是清楚。value stack 的栈顶就是 所访问的actionspa

        对于s标签里面的内容,例如<s:property value="username"/>,struts 在解析这个标签的时候,会首先在action中查找有没有这个属性,找不到才去 action context中找。而若是这样写,<s:property value="#username"/>,struts会直接去 action context 中找。经过 ServletActionContext.getContext() 可获取到 action context, 是一个map。.net

        而 action 自己也在 action context 中,action context存储了大部分经常使用的对象,例如 request,response,session,application 等等,具体能够在 s:debug 中看到。debug

        对于ognl表达式,用#就代表从 action context中查找,不用#就是直接去value stack栈顶,即action中查找对象

由于session就在action context中,所以 访问session就须要加 #, <s:property value="#session.username"/> .blog

        疑问:可是对于 <s:property value="#request.username"/> 若是request中没有username属性,则依次去 action,action context,session中去找。 这多是由于 action,  action context, session 都在request中有引用的缘故吧。get

 

关于更详细的原理,参阅:io

        Struts2数据传输的背后机制:ValueStack(值栈) 原理

        在Struts2中使用ValueStack、ActionContext、ServletContext、request、session等

相关文章
相关标签/搜索