关于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) {}
});
});
关于freemarker标签+Spring3.0 V层学习的更多相关文章
- 模块化之Spring3.0 web fragment和gradle构建项目
1.背景 模块化开发很久以前就开始普及的概念.但是到了企业实际情况中,真正把模块化作为系统架构的核心的不多.或者说对模块化有这个意识,但是具体到底该如何实现,有些模糊,同时也许因为项目紧.任务中. ...
- Spring3.0 与 MyBatis框架 整合小实例
本文将在Eclipse开发环境下,采用Spring MVC + Spring + MyBatis + Maven + Log4J 框架搭建一个Java web 项目. 1. 环境准备: 1.1 创建数 ...
- FreeMarker标签与使用
模板技术在现代的软件开发中有着重要的地位,而目前最流行的两种模板技术恐怕要算freemarker和velocity了,webwork2.2对两者都有不错的支持,也就是说在webwork2中你可以随意选 ...
- spring3.0的jar包详解
1. spring.jar 是包含有完整发布模块的单个jar 包. 2. org.springframework.aop 包含在应用中使用Spring的AOP特性时所需的类. 3. org.sprin ...
- 《Spring3.0就这么简单》
第一章 认识Spring 1.Spring提供的IOC容器,是Spring大杀器之一.容器将对象之间的依赖关系交给Spring进行控制,采用配制的方式对依赖关系进行描述,由Ioc容器负责依赖类之间的创 ...
- Spring3.0.3使用之异常解决
2010-10-29 温馨提示: 以下异常仅在Spring3.0.3版本中遇到,其他版本可能也会遇到,读者可作参考.不保证会顺利通过. 近期在学习Spring3的一些 ...
- FreeMarker标签使用
FreeMarker标签使用 模板技术在现代的软件开发中有着重要的地位,主要用于view层的展示,freemarker是比较流行的一种. 一.FreeMarker模板文件主要有4个部分组成 ①文本,直 ...
- SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置
一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...
- spring3.0使用annotation完全代替XML
@Service与@Component有什么不同?那天被问到这个问题,一时之间却想不起来,就利用这篇文章来纪录spring3.0中常用的annotation. 从spring2.5开始,annotat ...
随机推荐
- C#操作Access数据库(创建&修改结构)
本文转自:http://www.cnblogs.com/liyugang/archive/2012/11/17/2775393.html 想要在程序中控制Access,不是数据,而是Access数据库 ...
- JavaScript编程异步助手:Promise
异步模式在Web编程中变得越来越重要,对于Web主流语言JavaScript来说,这种模式实现起来不是很利索,为此,许多JavaScript库(比如 jQuery和Dojo.AngularJS)添加了 ...
- c# access插入null值
c# 插入access数据库 提示错误: Parameter @DeviceLocation has no default value. 参数@DeviceLocation 的有没有默认值. Stri ...
- ASP.NET读取EXCEL文件的三种经典方法(转)
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path) { str ...
- 如何区别PeekMessage&GetMessage SendMessage&PostMessage
转自http://blog.csdn.net/young0325/article/details/6430664 Peekmessage和Getmessage都是向系统的消息队列中取得消息,不过性质不 ...
- iOS NSDictionary、NSData、JSON数据类型相互转换
iOS经常需要用到数据类型的转换,下面列举一下常用类型的转换. 1.NSDictionary类型转换为NSData类型: //NSDictionary -> NSData: NSDictiona ...
- 收藏的博客--PHP
32位Win7下安装与配置PHP环境(一至三) http://blog.csdn.net/yousuosi/article/details/9448903
- java获取获得Timestamp类型的当前系统时间。
java获取获得Timestamp类型的当前系统时间. java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = n ...
- YII2.0中实现高级注册
如何在不修改逻辑代码的情况下完美解决以上三个问题?看了下面的教程,一目了然! 以高级版2.0.6为例,打开/frontend/models/SignupForm.php class SignupFor ...
- node 学习笔记
以下笔记默认安装完成node 及npm 1.安装express 新版本的express-generator已经独立出来,全局安装这个包就ok. npm install express-generato ...