Velocity 循环指令一种好的解决方法

Velocity 循环指令一种好的解决方法前提好的解决方案拿我最近做的一个项目做例子参考前提前台的数据经常是由需要通过foreach循环获取。好的解决方案:(拿我最近做的一个项目做例子)购物商城左边的导航栏,商品大分类和小分类(Category)1、在model包下创建一个ViewObject类publicclassViewObject{privateMapString,Objectobjs=n

前提

前台的数据经常是由需要通过 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入门指南——第七章 循环指令

今天的文章Velocity 循环指令一种好的解决方法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24547.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注