Jfinal前后台传值

了解任何一个框架之前先得了解它怎么从html页传值到后边,html页如何从后边得到值。现在咱们就简单的了解一下JFinal框架的传值。

基础知识:
在尝试着做了这么几个页面之后,发现如下:
1、controller中返回的JSon数据主要有两种方法:一个是我第一次接触即将要在下文中说的setAttr方法。另一个就是和先在controller把list转换成Json然后再renderJson()。

2、页面往controller传值分为:同页面传值和从一个页面传值到另一个页面。
     同页面传值很简单,就赋参数然后在controller用getPara()来接收。
     不同页面的传值,需要在controller调用页面加载方法的时候就用 getPara() 提前得到前一个页面传过来的参数,赋给一个静态全局变量,然后再在controller的其他方法中调用。

3、在JFinal框架中,自己写的每一个controller都得继承JFinal中的一个核心类Controller。一个controller可以写多个查找页面的action。而写完一个controller要想可以从action找到对应的页面必须得在继承了JFinalConfig这个类的类中的configRoute方法中写一句话,用来配置路由。在configRoute方法中可以为 多个controller分别注册一个唯一的key。

4、在继承Controller的实现类里就包含上面第一点和第二点的方法:setAttr和getPara。另外它还有render方法,他们的具体原理如下:
      1)setAttr是设置结果集数据至request对象里。
      2)getPara系列方法是从request对象里获取参数值。
      3)解析并返回视图结果。一般返回页面的时候都需要用到这个render方法,它有好多种变形。它的参数可以是JSON,也可以是HTML页面等。


实战演练:
   下面咱们就说一下如何用setAttr方法给前台赋值,从而减少前台js的代码。貌似在SSH商城的时候也用过,可是自己敲的时候还真是没有注意。
我需要做的页面大概长这个样子:


需要从后台获得许多值赋到前台的文本框中,一开始我的js代码是这样的:
[javascript] view plain copy
  1. function LoadPage(){  
  2.     $.ajax({  
  3.         url:'detailCourseEvaluate/queryByEvaluateID',  
  4.         async:false,  
  5.         type:'post',  
  6.         dataType:"json",  
  7.         success:function(data){  
  8.             $("#teacherName").val(data.teacherName);  
  9.             $("#teacherCompany").val(data.teacherCompany);  
  10.             $("#teacherJob").val(data.teacherJob);  
  11.             $("#goodAt").val("擅长领域:"+data.goodAt);  
  12.             $("#telphone").val("联系方式:"+data.telphone);  
  13.             $("#evaluateLevel").val("综合评价:"+data.evaluateLevel);  
  14.             $("#jxymsxf").val("教学与描述相符值:"+data.jxymsxf);  
  15.             $("#jsdjxtd").val("讲师的教学态度值:"+data.jsdjxtd);  
  16.             $("#jsxysd").val("讲师的响应速度值:"+data.jsxysd);  
  17.    
  18.         },  
  19.         error:function(){  
  20.    
  21.             }  
  22.     });  


基本思路就是,从后台查出数据之后,手动赋给每一个文本框。这里文本框还不算多,可以手写。但是可以试想一下:一旦文本框多了.......(非得把我的眼给找瞎了不可!)所以就借鉴已经做好的页面,发现了下面的方法。

修改后的代码:没有js,只有html和controller:
html:
 
  1. <input type="text" class="form-control" id="teacherName" value="${(teacher.nickName)!}" style="border:none;font-size:22px;">  


controller:
  1. private static String EvaluateID = null;  
  2.     detailCourseEvaluateService courseEvaluate=new detailCourseEvaluateService();  
  3.     TjEvaluatecourse TjEvaluatecourse=new TjEvaluatecourse();  
  4.     /* 
  5.      * 课程评论详情页 
  6.      * 李少然 2016-5-6 14:55:50*/  
  7.     @Before(LoginInterceptor.class)  
  8.     public void list() {  
  9.         EvaluateID=getPara("evaluateID");  
  10.         TjEvaluatecourse Evaluatecourse = null;  
  11.         //根据评论ID查询教师的ID  
  12.         Evaluatecourse=courseEvaluate.findCourseById(EvaluateID);  
  13.         String teacherid=Evaluatecourse.getTStudentid();  
  14.         //放入值栈中,方便页面获取  
  15.         setAttr("Evaluatecourse",Evaluatecourse);  
  16.    
  17.         //根据教师ID查询教师的一些信息  
  18.         TjStudent teahcerList=null;  
  19.         teahcerList=courseEvaluate.findTeacherById(teacherid);  
  20.         //放入值栈中,方便页面获取  
  21.         setAttr("teacher",teahcerList);  
  22.         //加载讲师头像  
  23.         String Pic=teahcerList.getHeadPic();  
  24.         String HeadPic = "http://123.56.120.25:8888/apple/" + Pic;  
  25.         if(Pic!="" || Pic!=null){  
  26.             setAttr("HeadPic",HeadPic);  
  27.         }else{  
  28.             setAttr("HeadPic","/style/css/images/img-avatar-bg.png");  
  29.         }  
  30.         render("detailCourseEvaluate.html");  
  31.     }  


    整体的思想就是:先把需要的东西从数据库中取出来,赋给一个实体,然后把这个实体用setAttr()方法存到Request对象里面,然后再在html也中用 ${(实体.属性)!}接收。这样就节省了手动添加input框的内容。

小总:
    小编感觉这种用setAttr()的方法虽然节省了手动写代码的时间,并且减少了人为的错误,可是它的属性名称必须得和数据库中对应的字段名称一样才可以,这样就又有了局限性。JFinal框架其实很简单,它都把我们常用的东西封装好了,不用和SSH框架一样需要配置很多的配置文件,非常的轻便实用。

猜你喜欢

转载自blog.csdn.net/chensi16114/article/details/78814545