Velocity 循环指令一种好的解决方法
来源:互联网 发布:淘宝店铺首页大图尺寸 编辑:程序博客网 时间:2024/06/05 06:22
- 前提
- 好的解决方案拿我最近做的一个项目做例子
- 参考
前提
前台的数据经常是由需要通过 foreach 循环获取。
好的解决方案:(拿我最近做的一个项目做例子)
购物商城左边的导航栏,商品大分类和小分类(Category)
1、在 model 包下创建一个 ViewObject 类
public class ViewObject{ private Map<String, Object> objs = new HashMap<>(); public void set(String key, Object value) { objs.put(key, value); } public Object get(String key) { return objs.get(key); }}
2、在 controller 包下创建个 BaseController 类
/** * 在每个页面显示图书大分类,抽离出来 * @return */ public List<ViewObject> selectAllCategory() { List<Category> categories = categoryService.selectAllCategory(); List<ViewObject> vos = new ArrayList<>(); for (Category category : categories) { ViewObject vo = new ViewObject(); vo.set("category", category); vo.set("id", category.getId()); //System.out.println("category 中的 id 是 "+category.getId()); vos.add(vo); } return vos; } /** * 获取图书的小分类,在这里将小分类中的大分类id查找出来,保存在 cds.id 中, * 然后在模板引擎中通过将 vos.id 和 cds.id 相比较。然后如果相同的话,就取出来放在对应的大分类下 * @return */ public List<ViewObject> selectAllCategoryDetail() { List<CategoryDetail> categoryDetails = categoryDetailService.selectAllCategoryDetail(); List<ViewObject> cds = new ArrayList<>(); for (CategoryDetail categoryDetail : categoryDetails) { ViewObject vo = new ViewObject(); vo.set("categoryDetail", categoryDetail); //System.out.println("categoryDetail 中的 categoryDetail id =" + categoryDetail.getId() + "category id = " + categoryDetail.getCategory_id() + " name = " + categoryDetail.getName()); vo.set("id", categoryDetail.getCategory_id()); cds.add(vo); } return cds; }
3、在 IndexController 类下,需要继承 BaseController.java 类
/** * 返回首页 * @param model * @return */ @RequestMapping(path = {"/", "/index"}) public String index(Model model) { //模板引擎设置图书分类左边导航栏 model.addAttribute("vos", selectAllCategory()); model.addAttribute("cds", selectAllCategoryDetail()); //返回主页 return "index"; }
4、抽离导航部分的代码 left.html
<!--左边图书分类导航栏--><div class="c3_b1_left"> <dl> #foreach($vo in $vos) <dd> <h1>$!{vo.category.name}</h1> <p> #foreach($cd in $cds) #if($vo.id == $cd.id) <a href="/list">$!{cd.categoryDetail.name}</a> #end #end </p> </dd> #end </dl></div>
5、首页中相应的位置引入 left.html
#parse("left.html")
这样就可以解决问题了,可是有时候我们需要控制循环的个数,因为我们网页端可能只需要特定的数据量
那么就需要中断 foreach,可以使用 #break 指令终止循环
#foreach( $vo in $vos ) #if( $foreach.count > 5 ) #break #end $!{vo.customer.Name}#end
参考
Velocity入门指南——第七章 循环指令
阅读全文
0 0
- Velocity 循环指令一种好的解决方法
- Velocity 指令的转义
- 好用的velocity
- 编写自定义的 Velocity 指令
- 编写自定义的 Velocity 指令
- 编写自定义的 Velocity 指令
- c++循环包含一种解决方法
- 编写自定义的 Velocity 指令 #cache
- velocity中自定义指令的用法
- 使用velocity生成静态页面,及velocity的循环控制
- topK的一种解决方法
- 我喜欢的一种好
- 一种基于java语言的模板引擎velocity的使用
- 一种循环注入的思路
- 无限循环的一种表示
- for循环的一种简化
- 循环buffer的一种实现
- 循环队列的一种应用
- 作业5.矢量量化程序调试结果
- 利用Python folium库 调用OpenStreetMap制作GDP热力图
- JZOJ 1154. 【GDOI2003】购物
- (转载)Java 学习笔记 开发环境搭建JDK+Tomcat+Eclipse
- spring学习--面向切面编程AOP和AspectJ
- Velocity 循环指令一种好的解决方法
- 欢迎使用CSDN-markdown编辑器
- Maven 入门
- MySQL存储过程
- matlab入门教程六 ----- 多项式运用
- mysql主从复制
- JS-4-对象
- 通过源码详解 Servlet
- 【行有不得者,皆反求诸己】本土心理学——一个小培训的一点思考