码迷,mamicode.com
首页 > 其他好文 > 详细

【今日开讲】--- 通过前后台传值了解JFinal

时间:2016-05-07 08:53:58      阅读:1191      评论:0      收藏:0      [点我收藏+]

标签:

   了解任何一个框架之前先得了解它怎么从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代码是这样的:
function LoadPage(){
    $.ajax({
        url:'detailCourseEvaluate/queryByEvaluateID',
        async:false,
        type:'post',
        dataType:"json",
        success:function(data){
            $("#teacherName").val(data.teacherName);
            $("#teacherCompany").val(data.teacherCompany);
            $("#teacherJob").val(data.teacherJob);
            $("#goodAt").val("擅长领域:"+data.goodAt);
            $("#telphone").val("联系方式:"+data.telphone);
            $("#evaluateLevel").val("综合评价:"+data.evaluateLevel);
            $("#jxymsxf").val("教学与描述相符值:"+data.jxymsxf);
            $("#jsdjxtd").val("讲师的教学态度值:"+data.jsdjxtd);
            $("#jsxysd").val("讲师的响应速度值:"+data.jsxysd);
 
        },
        error:function(){
 
            }
    });


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

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


controller:
private static String EvaluateID = null;
    detailCourseEvaluateService courseEvaluate=new detailCourseEvaluateService();
    TjEvaluatecourse TjEvaluatecourse=new TjEvaluatecourse();
    /*
     * 课程评论详情页
     * 李少然 2016-5-6 14:55:50*/
    @Before(LoginInterceptor.class)
    public void list() {
        EvaluateID=getPara("evaluateID");
        TjEvaluatecourse Evaluatecourse = null;
        //根据评论ID查询教师的ID
        Evaluatecourse=courseEvaluate.findCourseById(EvaluateID);
        String teacherid=Evaluatecourse.getTStudentid();
        //放入值栈中,方便页面获取
        setAttr("Evaluatecourse",Evaluatecourse);
 
        //根据教师ID查询教师的一些信息
        TjStudent teahcerList=null;
        teahcerList=courseEvaluate.findTeacherById(teacherid);
        //放入值栈中,方便页面获取
        setAttr("teacher",teahcerList);
        //加载讲师头像
        String Pic=teahcerList.getHeadPic();
        String HeadPic = "http://123.56.120.25:8888/apple/" + Pic;
        if(Pic!="" || Pic!=null){
            setAttr("HeadPic",HeadPic);
        }else{
            setAttr("HeadPic","/style/css/images/img-avatar-bg.png");
        }
        render("detailCourseEvaluate.html");
    }


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

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

【今日开讲】--- 通过前后台传值了解JFinal

标签:

原文地址:http://blog.csdn.net/lishaoran369/article/details/51334236

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!