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) {}

  });

});

关于freemarker标签+Spring3.0 V层学习的更多相关文章

  1. 模块化之Spring3.0 web fragment和gradle构建项目

      1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...

  2. Spring3.0 与 MyBatis框架 整合小实例

    本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...

  3. FreeMarker标签与使用

    模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选 ...

  4. spring3.0的jar包详解

    1. spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.sprin ...

  5. 《Spring3.0就这么简单》

    第一章 认识Spring 1.Spring提供的IOC容器,是Spring大杀器之一.容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创 ...

  6. Spring3.0.3使用之异常解决

    2010-10-29  温馨提示:         以下异常仅在Spring3.0.3版本中遇到,其他版本可能也会遇到,读者可作参考.不保证会顺利通过.         近期在学习Spring3的一些 ...

  7. FreeMarker标签使用

    FreeMarker标签使用 模板技术在现代的软件开发中有着重要的地位,主要用于view层的展示,freemarker是比较流行的一种. 一.FreeMarker模板文件主要有4个部分组成 ①文本,直 ...

  8. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

  9. spring3.0使用annotation完全代替XML

    @Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation. 从spring2.5开始,annotat ...

随机推荐

  1. Python邮件脚本

    def sendmail(): import smtplib from email.mime.text import MIMEText from email.utils import formatad ...

  2. [开发笔记]-获取歌曲ID3信息

    ID3介绍: ID3,一般是位于一个mp3文件的开头或末尾的若干字节内,附加了关于该mp3的歌手,标题,专辑名称,年代,风格等信息,该信息就被称为ID3信息,ID3信息分为两个版本,v1和v2版. 获 ...

  3. DB2事务日志已满的解决方法

    DB2命令终端输入: db2 update db cfg for <dbname> using LOGPRIMARY 50 db2 update db cfg for <dbname ...

  4. 踏着前人的脚印学Hadoop——结构、重点

    HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...

  5. APP store 审核注意点

    磨刀不误砍柴工.作为手机应用开发者,你需要向应用商店提交应用审核,迅速通过审核可以让你抢占先机.对苹果iOS应用开发者来说尤其如此.苹果应用商店的审核近乎吹毛求疵,下面这些清单可以让你知道苹果会在哪些 ...

  6. 上架app 到app store 的出现: “The IPA is invalid. It does not inlude a Payload directory.”错误处理

    今天打包上传app到app store上遇到的一个错误,在xcode6.2下提示: The IPA is  invalid. It does not inlude a Payload director ...

  7. Linux访问Windows磁盘实现共享

    业务需求说明:公司在部署hadoop集群和DB server与SAN存储,公司的想法是前端通过DB Server能够将非结构化的数据能放进SAN存储当中,而hadoop集群也能够访问这个SAN存储.因 ...

  8. linux下的deb/rpm文件的说明和安装方法

    1.    deb 是 ubuntu .debian 的格式.    rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是debian发行版的软件 ...

  9. cf--1C

    //Accepted 0 KB 60 ms //给出正多变形上的三个点,求正多形的最小面积 //记三个点之间的距离a,b,c; //由余弦定理得cosA //从而可求出sinA,和正多边形所在外接圆的 ...

  10. libimobiledevice安装步骤

    https://github.com/libimobiledevice/libimobiledevice libimobiledevice安装指南,你还不知道libimobiledevice为何物,赶 ...