struts2中input跳转Action问题

Kreocn 2009-09-08 03:29:01
各位达人,请先看清楚是struts2..不是struts1...我以前提好几次struts2的问题..都有许多精通struts1的高手来回答...结果答案很精彩,我却用不到..额..


问题是这样的...

我定义了XML框架校验后,在struts.xml的action中定义了


<action name="x_save" class="org.test.action.XxxAction" method="save">
<result type="redirectAction">
<param name="actionName">x_list</param>
<param name="message">${message}</param>
</result>
<result name="input">x_list</result>
</action>
<action name="x_list" class="org.test.action.XxxAction" method="list">
<result>/jsp/sys/XxxList.jsp</result>
</action>


在出现Input的情况时,却出现了错误

The requested resource (/x_list) is not available

意思是没有找到这个资源(action),然后发现x_list根本进行action解析,而是直接当成jsp在解析,所以没有那资源..

于是我就更改了配置

<action name="x_save" class="org.test.action.XxxAction" method="save">
<result type="redirectAction">
<param name="actionName">x_list</param>
<param name="message">${message}</param>
</result>
<result name="input" type="chain">x_list</result>
</action>
<action name="x_list" class="org.test.action.XxxAction" method="list">
<result>/jsp/sys/XxxList.jsp</result>
</action>


结果更怪异,居然说我没有定义 input 结果.....
No result defined for action org.test.action.XxxAction and result input



难道结果为Input跳转到action就只能用

type="redirectAction"或者type="redirect"吗???

如果是,怎么样在type="redirectAction"中把fielderror和actionerror都当做参数带过去?
...全文
2240 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wzj782 2010-08-05
同样的问题啊.
回复
DreamFlyInChina 2010-06-25
说来说去,有没有解决办法呀,郁闷中
回复
<result name="success" type="chain">InitAction.action</result>
一句代码搞定,type="chain"代表的传递参数。这样就能实现返回action跳转啦。
回复
jacky_zuo 2009-11-02
5楼的方法为正解,对每个需要校验的方法写个validateXxx方法,在该方法里可以将需要的数据放到request或session作用域中,跳转的input页面还是编辑页面即可;
回复
kingshigang 2009-10-28
<result name="input" type="redirect" >x_list</result>

当 返回的是 input 时候
会调用 x_list action
如果没在配置文件中 设置 访问 action 的后缀的话。就给后面+上.action

我经常这样做的。。 可以达到想要的效果
回复
yulu0214 2009-10-28
<result name=""></result>不指定type,默认为dispather,会转到一个jsp页面去,
楼主是要转到另一个action上面,应该定义type:<result type="chain">x_list<result>
回复
yjailj 2009-10-28
上面抱怨的是现在的公司.(只是说两句,没啥其他意思,哪天实在不爽,我也可以不干了.每个人都有自己的选择,没啥多余话讲)

想想之前的公司用 spring mvc , struts 2 还是我带动着用的
NND, 现在的公司, 技术却被丢在角落.

好久没搞 struts 2 了
回复
yjailj 2009-10-28
之前的公司用 struts 2 ,以前这个问题也碰到过...

LZ 的需求应该是这样的(假设): 访问 index.html(这是请求而非页面)
(我喜欢只拦截 html 后缀或无后缀,不需要登录就可以访问的就用 html ,需要登录才能操作的请求无后缀)
<constant name="struts.action.extension" value=",,html" />

后台加载一些数据发送到 index.jsp 页面,地址栏此时显示的当然是 index.html
在此页面有一个表单,用户填写了一些东西,发请求到后台,后台进行处理,发现有问题,
将有问题的原因放到 fielderror, 并将请求返回给原页面

此时: 问题出现了. 在加载页面时,是从后台查询和显示了一些数据的,如果直接将页面发到 index.jsp
这些数据肯定是无法显示的,如果是将视图发给 index.html,后台的fielderror却又无法显示

显然这不是我们的目的...

struts2(或者说 webwork)有一个好的解决方案, 可以使用 chain 进行跳转,此跳转的好处是可以将原 请求中的信息在后面一个 请求中进行获取.

然而,此时要注意, 要为 后面一个请求定义 input 视图.
想一下这个流程:

index.html(XxxAction 的 index 方法)请求中实际的页面 index.jsp
中有一个请求: demo(无后缀, XxxAction 的 demo 方法)进行操作,操作时发现有问题,
返回 input, 且 chain 至 index(配置文件中不需要标注后缀)

此时,后台还是会去 XxxAction 中执行代码,
顺序是: validateIndex() -- validate -- index -- execute ,当执行完 validate 方法后,
会检查 fielderror 或 actionerror 中是否有值,因为在前面的请求中传过来的值在这里也是可以获取的
所以 前面的 fielderror 在此处被发现,所以不再执行 index 方法,进入input 视图
然而 LZ 并没有在 index 中定义 input 视图,所以...

仔细想想,在这里可以学到一个经验: 如果页面要显示一些数据,这些数据不需要任何操作,如下拉列表等等
查询这些数据的最好地方是 validate + (method 定义的大写的方法名的最开始处) 这个方法处,如 validateIndex() . 我用 struts2 一般都会写 validate, 哪怕什么都不做,也写出来

再说一句: 程序中如果可以,尽量不要用 chain ,这个跳转虽然有它的好处,但却让跳转变得很杂乱,视图也变得混乱. opensymphony 好像也不建议总是用 chain 的

最后抱怨一下, NND, struts2 都不会用,写 struts 1 那些代码人的又杂乱, 上手时得一句句的看,文档说明也没有.什么玩意...

下班了
回复
wgj830823 2009-10-28
关注一下
回复
jacky_zuo 2009-10-28
我也遇到这样的问题
回复
l5751311 2009-09-08
你前面的用这个试试
<result name="input">x_list.action</result>

当然结果为input只是个名字而已
在内部默认一些情况返回input
肯定不是只能用redirect了

回复
redlotus_lyn 2009-09-08
<action name="x_list" class="org.test.action.XxxAction" method="list">
<result name="input">指向jsp文件</result> <result>/jsp/sys/XxxList.jsp</result>
</action>
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2009-09-08 03:29
社区公告
暂无公告