一、 问题描述:
1. 技术使用Ext2.0 ,struts2.0
2. 在一个form表单中,有一个参数为url,这个url是维护在数据库中的,代表一个业务数据显示的页面,当用户选择此业务进行处理时,就需要跳转到此业务类型的页面进行显示,同时还需要传输过去一些数据;由于传输的数据量也是不定的,可能会超过1024,所以使用javaScript的 window.location 进行跳转,参数传递可能有问题,所以需要更改为post的方式将数据传递过去。
二、 Ext2.0 form 简介
Ext 中的form表单提交,默认的情况下为ajax方式,也就是说当你点击form的submit按钮时,页面不进行跳转,只是返回处理结果(成功或者失败)。
但是Ext 还提供了非ajax的方式提交,只是需要额外的配置:
onSubmit : Ext.emptyFn,
submit : function() {
submitForm.getForm().getEl().dom.method = 'post';
submitForm.getForm().getEl().dom.action = rootPath + "elecbill/common/unTask_goBusiPage.action";
submitForm.getForm().getEl().dom.submit();
}
在上面的配置中蓝色的部分就是form表单的非ajax提交方式,然后再指定其数据传输方式使用‘post’方式。
三、 Struts2的Chain Result介绍
在struts2中配置请求的跳转,都是在struts.xml中指定action的<result>节点,默认我们都是跳转到×××.jsp页面,但是有时候我们要跳转到其他人已经写好的action中进行处理,这时候就需要用到 Chain Result。Chain Result的配置如下:
<package name="public" extends="webwork-default">
<action name="login" class="...">
<result type="chain">
<param name="actionName">dashboard</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="webwork-default" namespace="/secure">
<action name="dashboard" class="...">
<result>dashboard.jsp</result>
</action>
</package>
注意蓝色部分,就是表明login的跳转将使用 /secure下的dashboard的action进行处理,最终将跳转到dashboard.jsp页面
四、 问题解决方案
1. 通过上面介绍的Ext form的非ajax方式和struts2的Chain Result的处理方式。
2. 我们先设计一个业务跳转“中转站”,此中转站的功能主要是接收用户选择相应的业务处理之后,根据参数中的url,跳转到对应的业务显示页面中。
3. 将Ext中的form表单配置为非Ajax方式,action指向“中转站”的action
submitForm.getForm().getEl().dom.action = rootPath + "elecbill/common/unTask_goBusiPage.action"
4. 然后在中转站中解析传递的url参数,将namespace 的名称和action的名称取出并且保存为String actionName 和 Sting nameSpace 。
在struts.xml文件中配置如下:
<result name="goBusiPage" type="chain">
<param name="actionName">${actionName}</param>
<param name="namespace">${namespace}</param>
</result>
这样就可以就实现了动态跳转了!
posted on 2010-07-12 11:33
梦源 阅读(2097)
评论(0) 编辑 收藏