您现在的位置: 破洛洛 >> 建站学院 >> 网站开发 >> Ajax教程 >> 正文

ajax、Struts、spring的无缝结合

作者:佚名 来源:不详 更新时间:2008-1-4
分享到

zhipingch 原创

    去年初,正好负责一个医药信息系统的设计开发,架构设计时,采用Struts+JDBC(自定义采用适配器模式封装了HashMap动态VO实现的持久层)。后来ajax热潮兴起,正好系统中有很多地方需要和服务器端交互数据,如采购销售系统中的订单头/订单明细等主从表结构的维护。
    [color=blue]数据交互过程[/color],我们考虑采用xml来组织数据结构,更新/保存:前台封装需要的xml,通过ajax提交---〉action解析xml ---〉改造原有的持久层实现xml持久化;
    查询时:持久层根据实际需要返回xml,document对象,---〉action 处理 --〉前台自己封装js库来解析xml,并刷新部分页面。

    ajax:已经有很多方法实现跨浏览器的方式,这里只介绍最简单的方式,同步模式下提交xmlStr给action(*.do)。

  1. /**
  2.  * 将数据同步传递给后台请求url
  3.  *  @return 返回xmlhttp 响应的信息
  4.  *  @param-url = '/web/module/xxx.do?p1=YY&p2=RR';
  5.  *  @param-xmlStr:xml格式的字符串 <data><xpath><![CDATA[数据信息]]></xpath></data>
  6.  * @author zhipingch
  7.  * @date 2005-03-17
  8.  */
  9. function sendData(urlStr, xmlStr) {
  10.     var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  11.     xmlhttp.open("POST", urlStr, false);
  12.     xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  13.     if (xmlStr) {
  14.         xmlhttp.send(xmlStr);
  15.     } else {
  16.         xmlhttp.send();
  17.     }
  18.     return xmlhttp.responseXml;
  19. }



    struts中我们扩展了Action,实现了xmlStr转化成document对象(dom4j),并且完善了转发方式。如
[quote]
1.DispatchAction
     以一个Controller响应一组动作绝对是Controller界的真理,Struts的DispatchAction同样可以做到这点。

[list]
<action path="/admin/user" name="userForm" scope="request" parameter="method" validate="false">
    <forward name="list" path="/admin/userList.jsp"/>
</action>
[/list]
    其中parameter="method" 设置了用来指定响应方法名的url参数名为method,即/admin/user.do?method=list 将调用UserAction的public ActionForward list(....) 函数。   

    public ActionForward unspecified(....) 函数可以指定不带method方法时的默认方法。[/quote]
    但是这样需要在url后多传递参数[size=18][color=red]method=list [/color][/size];并且action节点配置中的[color=red]parameter="method" [/color]
也没有被充分利用,反而觉得是累赘!

    因此我们直接在BaseDispatchAction中增加xml字符串解析,并充分利用action节点配置中的[color=red]parameter="targetMethod" [/color],使得转发的时候,action能够直接转发到子类的相应方法中,减少了url参数传递,增强了配置信

转载请注明:破洛洛(谢谢合作)
网友评论: