zoukankan      html  css  js  c++  java
  • 关于freemarker标签+Spring3.0 V层学习

    import标签

    就是把其他的ftl页面引用进来

    <#import "/common/ui.ftl" as ui>

    使用时

    <@ui.message/>,message是存在于/common/ui.ftl文件内的macro

    assign标签

    这个标签就是单纯的赋值语句,例如我们在后台放到modelmap里一个javabean

    modelmap.put("javabean", javabean);

    前台就可以使用assign把javabean的属性赋值给变量。

    <#assign value1=javabean.field>

    他也可以写的比较复杂。

    比如

     <#assign name1=value1 name2=value2 ... nameN=valueN [in namespacehash]>

    再比如

    <#assign x>
    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"]as n>
    ${n}
    </#list>
    </#assign>

    if标签

    if标签比较简单

    他可以存在于freemarker的任何一个角落。

    可以放到属性值里,可以放到标签里,可以单独放到外面。

    而比较特殊的是,if标签在判断的时候容易报类似空指针错误。

    比如:

    <#if javabean.field == '1'>test</#if>当field为空时,没有关系,但是当javabean为空时,页面就会抛异常了。

    所以我们在后台赋值的时候,一定要记得给他赋初值,当然如果没有记得赋初值也没有关系。那么就需要麻烦一点。

    <#assign condition1=(javabean.field)!"">// 这句话的意思是javabean,field任一为null时,都会对condition1赋值为""。

    <#if condition1 == '1'>test</#if>

    还有一点就是if标签在select里面的时候,通常会有下面这种写法

    <select id="id1" name="name" value="${(javabean.field)!""}">
    <option value="1" <#if javabean.field == '1'>selected</#if>>名称一</option>
    <option value="2" <#if javabean.field == '2'>selected</#if>>名称二</option>
    </select>

    但是如果为了防止错误可能会这么写

    <select id="id1" name="name" value="${(javabean.field)!""}">
    <option value="1" <#if (javabean.field)!"" == '1'>selected</#if>>名称一</option>
    <option value="2" <#if (javabean.field)!"" == '2'>selected</#if>>名称二</option>
    </select>

    但是这样一来,就会变成总是显示最后一个【名称二】。具体原因不明(待研究)

    if标签页还有下面这种形式

    <#if condition1>statement1<#elseif condition2>statement2...<#else>statementn</#if>

    list标签

    我们在做增删改查页面的时候经常会遇到List显示/提交,List显示,如下所示:

    <#list list as obj>

      ${obj.feild1}

      ${obj.feild2}

    </#list>

    而List提交的话,需要和Spring3.0相结合,Spring3.0的后台获取提交参数的方式有普通的javabean自动映射

    后台

    Controller

    public String action(JavaBean bean, ModelMap modelMap){

      /*...*/

      modelMap.put("sample", bean);

      return "sample";// 我们是为了迁移到sample.ftl

    }

    JavaBean{

    String field1;

    List<User> users;

    }

    User{

    String userName;

    }

    前台ftl页面

    <#assign users=bean.users>

    <#list users as user>

      <input type="text" name="users[${user_index}].userName" value="${(user.userName)!""}">

    </#list>

    还有就是ajax提交,ajax提交需要利用js把前台输入数据转成json字符串,传给后台后利用fastjson转成JavaBean,

    当日fastjson能够转换的字符串长度有限。所以当页面输入量很大的时候,会报错(java.lang.ArrayIndexOutOfBoundsException)。

    所以要尽量减少直接使用业务内容,尽量使用业务编码(比如0-9)替代。

    后台

    @Controller
    @RequestMapping("/sample")

    public class Controller{

    @RequestMapping("/commit")
    @ResponseBody

    public JsonObject action(@RequestParam("paramname") String paramvalue), ModelMap modelMap){

      JavaBean bean = com.alibaba.fastjson.JSON.parseObject(salesActivityData, JavaBean.class);  

    }

    }

    JavaBean{

    String field1;

    List<User> users;

    }

    User{

    String userName;

    }

    前台ftl页面

    <form id="form1">

    <#assign users=bean.users>

    <#list users as user>

      <input type="text" name="userName" value="${(user.userName)!""}">

    </#list>

    <input type="button" id="commit" value="提交">

    </form>

    function getFormJson(frm){
    var o = {};
    var a = $(frm).serializeArray();
    $.each(a, function () {
    if (o[this.name] !== undefined) {
    if (!o[this.name].push) {
    o[this.name] = [o[this.name]];
    }
    o[this.name].push(this.value || '');
    } else {
    o[this.name] = this.value || '';
    }
    });
    return o;
    }

    function getformData(frm){

    var formdata={};

    var o=getFormJson(frm);

    var users=[];

    if(!(o.userName instanceof Array)) {
    var user= {};
    user["userName"] = o.userName;
    users.push(user);
    } else {
      for (var i=0;i<o.userName.length;i++) {
        var user= {};
        user["userName"] = o.userName[i];
        users.push(user);

      }
    }

    }

    $(function(){

      $("#commit").click(function(){

        $.ajax({
        url : "${ctx}/sample/commit.do",
        data : "paramname=" + encodeURI(JSON2.stringify(getformData($("#form1")))),
        type : 'POST',
        dataType : "json",
        success : function(data) {}

      });

    });

  • 相关阅读:
    U盘修复
    在tomcat中配置jdk的不同版本
    集​群​t​o​m​c​a​t​+​a​p​a​c​h​e​配​置​文​档
    如何挂自己的web项目(免费拥有自己的网站及域名)
    JQuery对表格进行排序
    JQuery中对各种域进行隐藏和显示操作
    大文件批量上传断点续传文件秒传
    web 开发常用字符串表达式匹配
    spring 工具类大集合
    spring 是如何注入对象的和bean 创建过程分析
  • 原文地址:https://www.cnblogs.com/niutouzdq/p/4527184.html
Copyright © 2011-2022 走看看