值栈在Struts2内部是如何工作的,或者当创建值栈上的对象时,是在拦截器执行之前还是在拦截器执行之后?对象压入值栈时,拦截器如何调用 getter 和 setter?
最佳答案
代码可用,是我见过最好的解释。
- 对象要么 (a) 压入堆栈,要么 (b) 放入值堆栈上下文。前者通过普通的 OGNL 符号访问。后者通过 OGNL 的
#
前缀字符访问,这基本上意味着“这是值堆栈上下文中的命名值”。 - 首先创建上下文的堆栈。任何下线都可能修改值堆栈(及其上下文);拦截器和 Action 是明显的主要参与者。
- 拦截器通常不会对值堆栈做很多事情,除了可能将对象推到它上面。 getter 和 setter 在操作上,而不是堆栈上,它们通常被直接调用。
- 当您使用 OGNL 访问值堆栈时,它会根据值堆栈评估 OGNL 表达式。命名值违背上下文,其他一切都违背堆栈。如果“当前”堆栈级别未解析为值,则查询下一个堆栈级别,依此类推,直到没有更多堆栈元素为止。
关于java - struts2值栈实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32505182/