【今日开讲】--- 通过前后台传值了解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代码是这样的:
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框架一样需要配置很多的配置文件,非常的轻便实用。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值