struts2的映射文件的一个疑问,求解释
时间:2011-10-12
来源:互联网
XML code
<action name="userAction" class="com.lyq.action.UserAction" method="upload"> <result name="upload">/a.jsp</result> </action> <action name="userAction" class="com.lyq.action.UserAction" method="add"> <result name="add">/b.jsp</result> </action> <action name="userAction" class="com.lyq.action.UserAction" method="update"> <result name="update">/c.jsp</result> </action>
上面的配置信息只是个样例,随手写了下,主要说明的问题就是在配置action时,就可以将请求直接交给该action的类中的具体方法。
在此我有两点不理解的:
第一,这些action的name都是一样的,那么请求到来时,struts查找struts.xml中的映射信息时怎么知道该用哪个映射?
第二,假如一开始在请求时使用了动态Action(例如:<form action="userAction!update"> method="post"),那么在请求发出后,就应该不需要在配置文件中做出如上的配置了,因为根据请求中!后面的update应该会去自动找这个对应的方法。
问题是:动态Action和在配置中设置特定的方法这两种是配合使用的吗,还是说他们本来就是两种处理多重业务逻辑的方法。
作者: lc_windson 发布时间: 2011-10-12
1.你这么写就只能动态调用了,不使用动态调用还真不知道会不会找到
2.<action name="userAction" class="com.lyq.action.UserAction" >
<result name="upload">/a.jsp</result>
<result name="add">/b.jsp</result>
<result name="update">/c.jsp</result>
</action>
适情况、需求、爱好而论,实际项目中一个action不可能就一个方法的。
PS:官方不推荐使用感叹号进行动态调用
作者: wby13579 发布时间: 2011-10-12
<action name="userAction_*" class="com.lyq.action.UserAction" method="{1}">
<result name="upload">/a.jsp</result>
<result name="add">/b.jsp</result>
<result name="update">/c.jsp</result>
</action>
<form action="userAction_update" method="post">
这样就执行的com.lyq.action.UserAction中的update方法!
作者: wjacketcn 发布时间: 2011-10-12
一种是吧method取掉 当你请求的时候告诉他调用哪个方法,
userAction!upload
另一种是吧action name="userAction"设置成不同的
作者: xiaona1047985204 发布时间: 2011-10-12
struts是根据方法的返回值来返回相应的视图,这么写与你上面那么写的意思是一样的,不写method,struts会自己到action里面寻找对应的方法~~
1.你这么写就只能动态调用了,不使用动态调用还真不知道会不会找到
2.<action name="userAction" class="com.lyq.action.UserAction" >
<result name="uploa……
谢谢你,我还是有点迷糊,你的意思是不是说动态Action和使用method不是配套的,而是两种方法?
我对你的解释做了如下归纳:
1.如果不写method也不用动态Action的话,那么肯定找不到对应的调用方法。
2.如果写了动态Action,但是没写method,struts会根据!后面的字符串自动找匹配的方法。
现在我有个问题:
如果只写了method,而没有动态Action,假设提交的表单form中 action=“userAction”,那么struts怎么知道该把这个表单数据给哪一个呢?配置文件中action的name属性都是一样的啊?这个是我困惑的地方。
作者: lc_windson 发布时间: 2011-10-12
你这样写估计是不行的 ,
一种是吧method取掉 当你请求的时候告诉他调用哪个方法,
userAction!upload
另一种是吧action name="userAction"设置成不同的
我上面的程序只是个样例,不是我想那么写的。你的意思跟我原先想的一样,但是书上的一些说法比较模糊,我被搞得有点晕。
你的另一种里面把action name="userAction"设置成不同的,意思是不是method也得写成需要调用的方法名?但是书上确实是按我写的那种,三种action的name属性是一样的,正是书上的那个源代码让我很不解。
如果你把userAction设置成不同的,那么相应的,提交表单时,form里面的action属性应当填写成对应的吧。这样匹配出来的才是对应的method方法
作者: lc_windson 发布时间: 2011-10-12
作者: luoaz 发布时间: 2011-10-12
难道你将三个action的名字写成一样的还能跑得起来?
+1
作者: xuguiyi100 发布时间: 2011-10-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28