struts中使用DispatchAction可能会遇到的一个问题
2009-01-07 18:14
435 查看
其实DispatchAction的原理说起来也很简单。
在struts-config.xml中配置Action的时候,加一个parameter的属性,并且起一个名字,通常为"method"。
用户在浏览器端发起请求的时候,一般都会带这个参数的。请求发送到服务器端之后,相应的DispatchAction会先判断这个参数是否存在,存在的话,值又是什么。然后根据浏览器端传过来的method的值,去调用相应的method,调用失败就抛异常。
任何项目都可以根据项目需求写一个自定义的DispatchAction,只要符合项目的需求就好,不过原理都是一样的。
#method参数的传递,可以用Get方式,也可以用post方式。
对于一些业务逻辑相对复杂点的画面来说,这个DispatchAction的存在确实是非常有必要的。
不过,在使用的时候,可能会遇到一个问题。
有时候,你会发现程序走到了一个错误的method里面去。本来是想到B method里面去的,可是却走到了之前的A method。
什么原因呢?
因为DispatchAction读到的method的值还是你之前传的A,而不是你在客户端设置的B,所以它依然会跳到A method去执行。
这主要是因为客户端有两个地方传同一个参数的不同的值。
一个是URL,当你前面一次是通过Get方式访问的时候,使用的是类似于"http://xxxxx/xxx.do?method=A"之类的方式,然后这个URL就保持在了浏览器的地址栏里面。接下来用户点击某一个button或者link要去执行B method的时候,我们一般会使用javascript来实现,把表单中的一个隐藏变量叫做method的值设置为B,然后通过POST方式,传回到了服务器端。
这时,DispatchAction中通过request.getAttribute()读到的method的值一定是A,而不是B。
# 具体原因到底是B被A覆盖了,还是因为A在B之前,记得不清楚了,什么时候确认一下。
所以,如果你在写类似的代码调试时(不一定是Struts),遇到了类似的问题,可以确认一下是不是上面说的这个原因。
---------------------------------------------------------------------------------------------------------
2009/07/05 补充
一种可行的办法是:要跳转到B method时,不要去设置那个隐藏变量method的值了,而是直接在form的action后面加上参数method=B就可以了。
在struts-config.xml中配置Action的时候,加一个parameter的属性,并且起一个名字,通常为"method"。
用户在浏览器端发起请求的时候,一般都会带这个参数的。请求发送到服务器端之后,相应的DispatchAction会先判断这个参数是否存在,存在的话,值又是什么。然后根据浏览器端传过来的method的值,去调用相应的method,调用失败就抛异常。
任何项目都可以根据项目需求写一个自定义的DispatchAction,只要符合项目的需求就好,不过原理都是一样的。
#method参数的传递,可以用Get方式,也可以用post方式。
对于一些业务逻辑相对复杂点的画面来说,这个DispatchAction的存在确实是非常有必要的。
不过,在使用的时候,可能会遇到一个问题。
有时候,你会发现程序走到了一个错误的method里面去。本来是想到B method里面去的,可是却走到了之前的A method。
什么原因呢?
因为DispatchAction读到的method的值还是你之前传的A,而不是你在客户端设置的B,所以它依然会跳到A method去执行。
这主要是因为客户端有两个地方传同一个参数的不同的值。
一个是URL,当你前面一次是通过Get方式访问的时候,使用的是类似于"http://xxxxx/xxx.do?method=A"之类的方式,然后这个URL就保持在了浏览器的地址栏里面。接下来用户点击某一个button或者link要去执行B method的时候,我们一般会使用javascript来实现,把表单中的一个隐藏变量叫做method的值设置为B,然后通过POST方式,传回到了服务器端。
这时,DispatchAction中通过request.getAttribute()读到的method的值一定是A,而不是B。
# 具体原因到底是B被A覆盖了,还是因为A在B之前,记得不清楚了,什么时候确认一下。
所以,如果你在写类似的代码调试时(不一定是Struts),遇到了类似的问题,可以确认一下是不是上面说的这个原因。
---------------------------------------------------------------------------------------------------------
2009/07/05 补充
一种可行的办法是:要跳转到B method时,不要去设置那个隐藏变量method的值了,而是直接在form的action后面加上参数method=B就可以了。
相关文章推荐
- struts1.3中使用DispatchAction的一个问题
- 在使用struts遇到的一个问题
- 关于struts1.3中使用DispatchAction的一个问题
- Struts中模型驱动与属性驱动共同使用可能会遇到的问题
- 使用Action创建一个JButton后,改变该按钮的名字可能会遇到意想不到的问题
- struts1.3中使用DispatchAction的一个问题
- Cocoa pods的安装使用以及过程中可能会遇到问题的汇总
- 使用Eclipse编译Web项目遇到的一个奇葩问题
- 使用EventBus遇到的一个问题
- 建立maven的web项目可能会遇到的一个问题Cannot detect Web Project version.
- Struts tiles使用中遇到的问题
- angularjs中使用ueditor遇到的一个问题
- 使用Servlet3.0的异步支持时我遇到的一个问题
- 当我们在程序中使用Packet32.h进行编程时,可能会遇到以下问题:
- ISE使用过程中遇到的一个诡异问题
- 使用struts2.5版本遇到的问题
- saprk rdd使用中遇到的一个典型问题
- 遇到一个问题,struts 与spring 整合
- 在使用mesos framework中遇到的一个问题
- 使用wildfly-10.1.0遇到一个问题:启动时提示“系统找不到指定的文件”