• 如何在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){
              
          }
      });
      

        

  • 相关阅读:
    北京爱丽丝幻橙科技有限公司
    红杉资本中国基金:创业者背后的创业者
    关于我们_ | 腕表时代watchtimes.com.cn
    当你想放弃的时候,问一下自己你尽力了吗
    李圣杰_百度百科
    范思哲
    DOM Traversal Example | Documentation | Qt Project
    关于QT中evaluateJavaScript()函数返回值的处理问题
    JS获取整个HTML网页代码
    javascript
  • 原文地址:https://www.cnblogs.com/luoruiyuan/p/5788653.html
Copyright © 2020-2023  润新知