zoukankan      html  css  js  c++  java
  • 如何在Crystal Portlet中正确返回JSON数据给AJAX请求?

    当Crystal Portlet中需要采用Ajax请求,并让后台返回Json数据时,如何才能正确、方便的返回Json数据呢?

    以下两种方法均可:

    方法一:Ajax请求时,采用RenderURL,对应Portlet类中采用ajax(data)方法返回Java对象即可;

    方法二:Ajax请求时,采用ResourceURL,对应Portlet类中采用ajax(data,response)方法将Java对象直接输出到Response流中;(推荐使用此方法)

    分步指南

    方法一:

    1. Ajax请求时,url采用RenderURL生成,与普通的portlet请求无差异;
    2. 对应访问的Portlet Class中,创建对应方法,并采用ajax(data)方式返回,如下代码示例:

      @RequestMapping(params = "action=getUserById")
      public String ajaxRenderUrlTest( @RequestParam String id){
          User user = userService.getUserById(id);
          return ajax(user);
      }
      

        

    3. 此时,可能会出现“common/_ajax.jsp文件找不到”的错误,按如下方法处理:
      1. 确保项目使用最新版本Crystal-portlet-core 2.4快照及以上版本;
      2. 在portlet的/WEB-INF/spring/common/jstl-portlet.xml文件中,采用如下配置,替换viewResolver bean的配置:

        <bean id="viewResolver"
            class="com.gsoft.crystal.portlet.CrystalInternalResourceViewResolver" abstract="true">
            <property name="viewClass"
                value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="basePrefix" value="/WEB-INF/jsp" />
            <property name="suffix" value=".jsp" />
            <property name="contentType" value="text/html;charset=UTF-8" />
            <property name="order" value="1" />
        </bean>
        

          

        1. class采用com.gsoft.crystal.portlet.CrystalInternalResourceViewResolver替换;

        2. 增加basePrefix变量,值为jsp文件所在根目录,如:/WEB-INF/jsp。

    方法二:(推荐使用)

    1. Ajax请求时,url采用ResourceURL生成;
    2. 对应访问的Portlet Class中,创建对应方法,并采用ajax(data,response)方式返回,如下代码示例:

      @ResourceMapping("testAjax")
      public void ajaxTest(ResourceResponse response, @RequestParam String id) throws IOException {
          User user = userService.getUserById(id);
          ajax(user, response);
      }
      

        

    3. 前台ajax调用示例代码如下:

      $.ajax({
          type:'post',
          url:'<portlet:resourceURL id="testAjax"/>',
          data:{
              <portlet:namespace/>id:110
          },
          success:function(data){
              
          }
      });
      

        

  • 相关阅读:
    HDOJ 2011
    OpenCV学习笔记(1)——VS2010 下安装OpenCV 2.4.4安装
    OC——Foundation—常用的类(2)----NSArray
    OC——Foundation—常用的类(1)字符串(NSString)
    OC——Foundation—结构体
    OC----Block语法
    OC----protocol语法
    OC----初识
    OC----内存管理
    OC----Category语法
  • 原文地址:https://www.cnblogs.com/luoruiyuan/p/5788653.html
Copyright © 2011-2022 走看看