struts 2给action传值时底层是怎么实现的? 20
比如jsp页面的表单中有一个<inputtype="text"name="password"/>Action中有privateStringpassword,那么strut...
比如jsp页面的表单中有一个<input type="text" name="password" /> Action中有private String password ,那么struts2 底层是怎么将页面填入的password怎么传给action中的password的。我要说明的是:我用过拦截器将request.getParameter()方法得到的password进行过修改,但是最终action中的password没有变化,这可知,不是通过getParameter方法来传值的。我觉得很有可能是通过反射机制,可是反射机制生成的Action类怎么在setPassword()方法执行前被拦截器拦截呢?我没有用spring,只希望弄清楚strut2的传值底层实现方法来在setPassword方法执行前解决编码问题!
展开
展开全部
拦截器或许是不行的了,你可以尝试用下过滤器,过滤器调用先后顺序早于拦截器的。
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑。
拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑。
拦截器,是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
追问
感谢您的热心回答。实际struts底层还是通过request.getParameter 来得到页面传来的参数。之后再用发射机制实现赋值的。我之前在拦截器中队request的getParameter方法进行处理,只是我写的拦截器是Filter,之后我换成Interceptor就可以了,我也不知道为什么!
追答
filter是过滤器,Interceptor才是拦截器.
展开全部
页面显示的是值栈中的值,你修改的是action中的值。解决方案,一,手动将值压入值栈。二,使用拦截器在每次请求响应前更新值栈中的值。希望能帮到你。
更多追问追答
追问
我想知道的不是页面怎么得到action中的值,我想知道页面给action传值的时候底层是怎么实现的,如何先如以前的servlet一样,....?password=123456,在action中就可以request.getParameter来得到password的值,那么在struts 2中又是怎么实现传值的呢?
追答
假设你的Action类中有变量String password; 要想获取页面中传过来的password,必须为password设置get 和set 方法。当你的页面进入Action时,ActionContext(Action上下文)通过set方法获取password的值并压入值栈栈顶,同时request也获取到password的值,同时也如堆栈,session等对象的值也被压入堆栈,ActionContext中的值在页面中可以直接用取值显示,而request中存储的password通过或者${password}取值。即struts是通过一个值栈来存储所有对象和ActionContext中的值得。ActionContext为栈顶对象,也称跟对象,ActionContext的值可以直接用变量名取,而其他的变量需要用#变量名取值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询