在webwork里使用ajax

        有些情况下,我们会要求局部刷新,很自然就会想到ajax,webwork自身有对ajax的支持,也提供了几个相应的控件,在此不想对webwork对ajax的支持的角度来介绍在webwork里使用ajax。在本文里,我会用很男人的方式来向大家介绍一下如何实现ajax。之所以说很男人,是因为,如果引用webwork自身的ajax,需要一些配置,使用起来也不是特别方便,还不如一针见血,直截了当的方式来实现来的直观和迅捷,并且可控性强(我一直在强调程序员的控制能力)。
        废话少说,进入主题:
        Action里的变化:通常在Action里的方法都返回一个String交由webwork来解析处理,在ajax调用方法里我们吧需要人很返回类型,直接void就行了。同时我们需要获得一个PrintWriter用于输出结果。外加抛出一个IOException,这就是Action里的所有变化了。下面我们结合一个修改密码的例子来说明:
/**
  * 修改密码 用于ajax调用
  */
 public void ModifyPassword() throws IOException {
  PrintWriter pw = this.getResponse().getWriter();
  getResponse().setContentType("text/html;charset=utf-8");
  boolean result = userService.updateModifyPassword(getOldPassword(),
    getNewPassword(), this.getLoginUserId());
  if (result) {
   pw.write("1");
  } else {
   this.addActionError("原密码错误!");
   pw.write("2");
  }
  pw.close();
 }

上面的方法很直观,首先通过response对象获取一个PrintWriter对象,用于输出结果,然后设置一下response的ContentType,以html页面的方式输出,同时设置编码方式为utf-8,防止出现乱码。然后用printwriter将结果输出,最后关闭printwriter就ok了,当然由于printwrite的write方法会抛出一个IOException,所以你需要增加对Exception的处理,可以选择在里面try---catch也可以选择直接throw出来 有外层框架来处理。
再看一下配置action的xml里的变化:
<action name="ModifyPassword" method="ModifyPassword"  class="userAction">
</action>

里面只有一个action的说明,没有<result></result>一节,这就是为什么在action里我们把方法声明为void的原因了。支持一个ajax方法的所有准备工作都结束了,剩下的就跟其他action一下调用就可以了,在脚本函数里,直接调用此action,获得返回结构即可。
        大功告成,收工!

posted @ 2007-08-25 16:16  呀呀个呸  阅读(1797)  评论(0)    收藏  举报