前提
前台的数据经常是由需要通过 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 循环指令一种好的解决方法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/24547.html