文章阅读
如何在JDiy中使用freemarker和JsonObject
文章类别: JDiy框架教程  更新日期: 2013-12-14 21:10:25.0  点击次数:8418

  从JDiy-2.5版开始,我们提供了对freemarker的支持,用户可以很方便的使用freemarker来做展现层模板.大家来看下面几个例子.

  在之前的旧版中,我们只能使用jsp来做展现层,使用JDiyAction编写一段代码,并转到jsp视图上,action方法看上去就像下面这样:

//...相关代码略
public void actionMethod(){
    //您的action业务代码
    forward("/WEB-INF/view/page1.jsp");//forward到展现层
}
//...相关代码略

  而如果您升级JDiy到2.5以上,您会发现JDiyAction的这个forward静态方法变成了@Deprecated(即这个方法被标注为“废弃”),所谓标记为废弃的方法(或者废弃类)的意思就是奉劝大家不要再继续使用它了。虽然在目前的情况下,您继续使用它没有任何问题,但是废弃的方法极有可能从以后的新版本中删除。为了避免以后升级出现兼容问题,您新开发程序的时候,要尽量避免使用这些废弃方法。那么既然是废弃方法,自然有更好的方法来代替它。

  您可以在新版本中直接通过return String的形式来代替forward. 所以,您可以写成像下面这样:

//...相关代码略
public String actionMethod(){
    //您的action业务代码
    return "/WEB-INF/view/page1.jsp";  //forward到展现层
}
//...相关代码略

  和原来的写法比较一下,这样子是不是更加方便了呢?首先,我们把actionMethod前面的返回类型由void改成了String,让这个方法返回一个字符串,而字符串的内容就是要forward到展现层的jsp页面地址。

再来看一下,我们要实现页面重定向,您可以写成这样:

//...相关代码略
public String actionMethod(){
    //您的action业务代码
    return "redirect:/index.jd";  //redirect网页重定向
}
//...相关代码略

  只需要加上"redirect:"前缀,即可实现页面重定向.

使用Freemarker:

  接着上面的例子,假如我们现在要改用freemarker来处理页面显示,我们将以上代码改成如下:

//...相关代码略
public String actionMethod(){
    //您的action业务代码
    return "/WEB-INF/view/page1.ftl";  //请求转至freemarker模板去处理显示
}
//...相关代码略

  JDiy会根据您返回的文件类型,自动匹配jsp页面或者freemarker模板(扩展名为*.ftl).

使用JsonObject:

  好了,再进一步,假设这个方法是给客户端js程序ajax异步调用的,它只需要返回一个json数据就可以了(不需要页面),那再把代码改成像下面这样:

//...相关代码略
public JsonObject actionMethod(){
    //您的action业务代码
    return new JsonObject()
          .set("result","success")
          .set("msg", "操作成功!"); //直接返回JsonObject
}
//...相关代码略

  注意actionMethod前面的返回类型由String变成了JsonObject,表明此方法仅返回JsonObject对象,再看里面的return 代码,我们通过new关键字构造了一个新的JsonObject(JsonObject类位于org.jdiy.json包中);并为这个JsonObject设置了两个属性result和msg,注意两处set的写法,大家熟悉吧?没错,就像JDiy框架的Rs对象一样的链式编程风格(连着写减少代码量)。这样就可以直接返回Json给客户端啦~~参考JDiy-API帮助文档得知,set方法的第二个参数是Object型的,也就是可以设置任何类型的对象(如int, boolean,Date, Map, JsonArray等等).

  新的疑问:如果这个actionMethod方法内部会根据条件判断,既有可能返回到jsp(或ftl),又有可能直接返回JsonObject又怎么办呢?这个就更简单了,您只需要将actionMethod前面的返回类型改为Object即可,就像下面这样:

//...相关代码略
public Object actionMethod(){
    //您的action业务代码
    if(fail){
        return new JsonObject()
          .set("result","fail")
          .set("msg", "操作失败!"); //直接返回JsonObject
    }else{
        return "/WEB-INF/view/result.ftl";//转freemarker
    }
}
//...相关代码略

  对于void无返回,或者返回值为null的action方法,JDiy将忽略对返回的后续处理,您仍旧可以通过app或取request, response等对象,进行其它操作.


更多有关于JDiyAction和JsonObject方面的知识,
请参见JDiy-API帮助文档:
http://www.jdiy.net/jdiy-doc/

[ 上一篇 合理使用JDiy的主键生成器   下一篇 JDiy配置文件详解:建站平台的配置与使用 ]
鄂ICP备18006629号-1 鄂ICP备18006629号-2       鄂公网安备 42050302000160号


技术支持QQ:39886616 QQ群:7759217
联系JDiy作者: ziquee java/javascript WEB编程
E-mail:ziquee@abcbcd.com http://189.cn
*尊姓大名:

*电子邮箱:

*QQ号码:

*留言内容:
提交留言
取消
loading...
注:带"*"的为必填项。请如实填写您的E-mail或QQ号码以便我们能与您取得联系。