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

  });

});

时间: 2024-11-16 10:02:28

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

Spring3.0官网文档学习笔记(五)--3.3

3.3 概述 Table 3.1. The bean definition Property Explained in... class Section 3.3.2, "Instantiating beans" name Section 3.3.1, "Naming beans" scope Section 3.5, "Bean scopes" constructor arguments Section 3.4.1, "Dependen

Spring3.0官网文档学习笔记(一)

Part 1 Spring框架概述 Spring是模块化的,在应用中只需要引入你所需要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web service访问你的逻辑,还有许多种方式保存数据. spring被设计成非侵入式的. 1.Spring框架简介 Spring框架提供了应用开发的基础部分,使得我们可以集中精神在业务开发层上. POJOS:plain old Java objects Spring允许创建非侵入式的POJO.这个特性支持Ja

Spring3.0官网文档学习笔记(六)--3.4.1

3.4 依赖 3.4.1 依赖注入 依赖注入两种方式:基于构造器的DI.基于setter方法的DI. 3.4.1.1 基于构造器的DI 参数是引入对象,且之前不存在父-子类关系: package x.y; public class Foo { public Foo(Bar bar, Baz baz) { // ... } } <beans> <bean id="foo" class="x.y.Foo"> <constructor-arg

Spring3.0官网文档学习笔记(七)--3.4.2

3.4.2 依赖与配置的细节 3.4.2.1  Straight values (primitives, Strings, and so on) JavaBeans PropertyEditors被用来转换这些value到实际的类型.? <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <

Spring3.0官网文档学习笔记(四)--3.1~3.2.3

3.1 Spring IoC容器与Beans简介 BeanFactory接口提供对任意对象的配置: ApplicationContext是BeanFactory的子接口,整合了Spring Aop功能,消息资源控制,事件发布,应用层特殊的上下文(在web应用中) 由IoC容器实例化.组装.管理的对象都是Bean 3.2 容器概述 org.springframework.context.ApplicationContext代表Spring IoC容器,并且负责通过读取配置元数据来实例化.配置.组装

Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6

3.4.3 使用depends-on 使用depends-on可以强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用",".";"." "隔开. <bean id="beanOne" class="ExampleBean" depends-on="manager"/> <bean id="manager" cla

Spring3.0官网文档学习笔记(二)

1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包) spring-*.jar *号代表的是模块的简写,如:spring-core, spring-webmvc, spring-jms 可以在四个不同的地方找到Spring: http://www.springsource.org/downloads/community  所有的jar包被打包成zip,名称从3.0开始是: org.spring

《Spring3.0就这么简单》--学习笔记2

第7章SpringMVC 1.controller中,如果希望方法入参也添加到模型中,只需要在相应的入参前面使用@ModeAttribute 2.Spring MVC在调用方法前会创建一个隐含的模型对象,作为模型数据的存储容器.如果处理方法的入参为Map或者Model类型(org.springframework.ui.Model,类似于Map,比Map更易用),SpringMVC会将隐含模型的应用传递给这些入参.于是开发者可以通过这个入参访问到模型中的所有数据,也可以向模型中添加新的属性数据.

Spring3.0第三讲:Spring实现简单的登录

学习Spring这些技术性框架,光掌握理论知识是远远不够了,我们要懂得学以致用,用键盘将学到的敲出来,在正确与错误中寻找Spring的用法. 为了给读者一个直观的概念,这里我用Spring搭建一个简单的登录,可以让你很快的了解Spring在持久层.业务层.表现层是怎么运作的,这样后面我们分模块讲解的时候,读者也能很快的知道. 本文所用工具为Eclipse IDE,数据库为Oracle 11g. 首先我们来了解登录这个功能,用户访问登录页面,输入账号和密码,点击登录,后台验证是否有账号和密码匹配,