请教一下使用jfinal如何将List结果集返回到flex页面?

shilinno1 发布于 2015/01/12 22:08
阅读 659
收藏 1

@JFinal 你好,请教一下大家,我现在遇到几个问题

1、如果不使用自定义Handler,页面提交报错发送失败,应该是发送消息被jfinal的过滤器给拦截掉了。

2、加了自定义Handler,request的值变成了null。没有相应的对象传递过来。

3、如何将list对象传递到flex页面,我现在的传递方法前台result为null。

希望大家能帮忙解决一下,谢谢了!

页面文件

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx=" http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/mx"
      initialize="init()"
      minWidth="955" minHeight="600">
 <fx:Script>
  <![CDATA[
   import com.demo.flex.BlogVo;
   import mx.collections.ArrayCollection;
   import mx.events.FlexEvent;
   import mx.rpc.events.FaultEvent;
   import mx.rpc.events.ResultEvent;
   import mx.controls.Alert;
   [Bindable]
   private function init():void {
    // TODO Auto-generated method stub
    // 这里拿到的是一个 List<VIEW_CORP> 实体对象集合
    
    cdi.index1();
    //remotingtest.showVal();
   }
   
   [Bindable]
   var corpList:ArrayCollection = new ArrayCollection();
   protected function cdi_resultHandler(event:ResultEvent):void {
    // TODO Auto-generated method stub
    Alert.show(event.result.toString());
    corpList = event.result as ArrayCollection;
  
   }
   
   [Bindable]
   protected function cdi_faultHandler(event:FaultEvent):void {
    Alert.show(event.toString());
    Alert.show("获取数据失败!");
   }
  ]]>
 </fx:Script>
 <fx:Declarations>
  <!-- 将非可视元素(例如服务、值对象)放在此处 -->
  <s:RemoteObject  id="cdi" destination="blogcontroller" result="cdi_resultHandler(event)" fault="cdi_faultHandler(event)" />
 </fx:Declarations>
 <mx:Panel x="16" y="15" width="95%" height="95%" title="展示Cprp数据Panel">
  <mx:DataGrid x="15" y="15" width="92%" height="92%" id="dataGrid"  dataProvider="{corpList}">
   <mx:columns>
    <mx:DataGridColumn headerText="id" dataField="id" />
    <mx:DataGridColumn headerText="title" dataField="title" />
    <mx:DataGridColumn headerText="content" dataField="content" />
   </mx:columns>
  </mx:DataGrid>
 </mx:Panel> 
</s:Application>

 

config文件

 

package com.demo.common;

import com.demo.blog.Blog;
import com.demo.blog.BlogController;
import com.demo.index.IndexController;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.dialect.OracleDialect;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;

/**
 * API引导式配置
 */
public class DemoConfig extends JFinalConfig {
 
 /**
  * 配置常量
  */
 public void configConstant(Constants me) {
  loadPropertyFile("a_little_config.txt");    // 加载少量必要配置,随后可用getProperty(...)获取值
  me.setDevMode(getPropertyToBoolean("devMode", false));
  me.setViewType(ViewType.OTHER);        // 设置视图类型为Jsp,否则默认为FreeMarker
 }
 
 /**
  * 配置路由
  */
 public void configRoute(Routes me) {
  me.add("/", IndexController.class, "/index"); // 第三个参数为该Controller的视图存放路径
  me.add("/blog", BlogController.class);   // 第三个参数省略时默认与第一个参数值相同,在此即为 "/blog"
 }
 
 /**
  * 配置插件
  */
 public void configPlugin(Plugins me) {

  
  C3p0Plugin cp = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim());
  //配置Oracle驱动
  cp. setDriverClass("oracle.jdbc.driver.OracleDriver");
  me.add(cp);
  ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
  me.add(arp);
  // 配置Oracle方言
  arp.setDialect(new OracleDialect());
  // 配置属性名(字段名)大小写不敏感容器工厂
  arp.setContainerFactory(new CaseInsensitiveContainerFactory());
  
  arp.addMapping("blog","id", Blog.class);
 }
 
 /**
  * 配置全局拦截器
  */
 public void configInterceptor(Interceptors me) {
  
 }
 
 /**
  * 配置处理器
  */
 public void configHandler(Handlers me) {
  me.add(new FlexHandler());
 }
 
 /**
  * 建议使用 JFinal 手册推荐的方式启动项目
  * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此
  */
 public static void main(String[] args) {
  JFinal.start("WebRoot", 80, "/", 5);
 }
}

 

自定义拦截器

 

package com.demo.common;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jfinal.handler.Handler;

public class FlexHandler extends Handler {
    @Override
    public void handle(String target, HttpServletRequest request,
      HttpServletResponse response, boolean[] isHandled) {
        String uri = request.getRequestURI();
        /**
        * 过滤Flex的请求,交给BlazeDS的Messagebroker处理。
        */
       // if (uri.indexOf("/messagebroker")==-1) {
            nextHandler.handle(target, request, response, isHandled);
      //  }
    }
}

Controller 类

 

package com.demo.blog;

import java.util.ArrayList;
import java.util.List;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.kit.JsonKit;

/**
 * BlogController
 * 所有 sql 与业务逻辑写在 Model 或 Service 中,不要写在 Controller 中,养成好习惯,有利于大型项目的开发与维护
 */
@Before(BlogInterceptor.class)

public class BlogController extends Controller {
 
 public void index() {
  
  setAttr("blogPage", Blog.me.paginate(getParaToInt(0, 1), 10));
  render("blog.jsp");
 }
 
 public void index1() {
 // Page<Blog> ls=Blog.me.paginate(getParaToInt(0, 1), 10);
 // setAttr("blogPage", ls);

  List<BlogVo> ls=new ArrayList<BlogVo>();
  BlogVo b1=new BlogVo();
  b1.setId("1");
  b1.setTitle("1");
  b1.setContent("1");
  BlogVo b2=new BlogVo();
  b2.setId("2");
  b2.setTitle("2");
  b2.setContent("2");
  ls.add(b1);
  ls.add(b2);

  String temp=JsonKit.toJson(ls);
  renderHtml(temp);
//  renderJson(ls);
//  renderHtml("test.html");
 }
 
 public void add() {
 }
 
 @Before(BlogValidator.class)
 public void save() {
  getModel(Blog.class).save();
  redirect("/blog");
 }
 
 public void edit() {
  setAttr("blog", Blog.me.findById(getParaToInt()));
 }
 
 @Before(BlogValidator.class)
 public void update() {
  getModel(Blog.class).update();
  redirect("/blog");
 }
 
 public void delete() {
  Blog.me.deleteById(getParaToInt());
  redirect("/blog");
 }
}


 实体对象

 

 

package com.demo.blog;

public class BlogVo {

 String id;
 String title;
 String content;
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public String getContent() {
  return content;
 }
 public void setContent(String content) {
  this.content = content;
 }
 
 
 
}

 

 

加载中
0
本人纯属虚构
本人纯属虚构

我做的flex一直都用http和java通信 一点也不存在这样的问题 想renderJson就renderJson 想render啥就啥

flex最好还是和后端不要太耦合

s
shilinno1
谢谢,你的回答。我试试使用httpService方法,我现在用的是remote方法。
0
本人纯属虚构
本人纯属虚构
remote object对应的model是应该是传统带有get set的model
返回顶部
顶部