我们一般的页面设计是一个模块的内容对应取自Action中的一个List , 但是大部分的页面排版是错分开的;
比如: 第一条是显示成图片的, 第二个是显示标题, 后面是一个文章列表List 。。
Action中可以设计为 :
public class IndexVo
{
private List<InfoVo> infoList = new ArrayList();//模块的List
}
public class InfoVo
{
Article articlePic; //图片的对象 如果是多个,也可写为List 第一篇文章
Article articleTitle; //标题的对象 如果是多个,也可写为List 第二篇
private List<Article> infoList = new ArrayList();//信息列表 第三篇以及后面的
}
public class Article
{
String title;
String picContent;
String content;
}
Service 层去拆分和组合数据 在Java中凑合List 的数据还是比较方便
public class CmsExhibitAction extends BaseAction
{
private IndexVo indexVo = new IndexVo();
public String execute(){
List autoList = service.getAutoList();
List newautoList = ....................;
List clubActive = ........................;
infoList = new IndexVo();
InfoVo infoVo = new InfoVo();
infoList.add(infoVo);
if(autoList.size()>0){
infoVo.setArticlePic(autoList .get(0));
}
//如果有多条,也可以
if(autoList.size()>n){
infoVo.setArticlePicList(autoList.subList(0, n-1));
}
}
}
<#list (indexVo.infoList)?if_exists as infos>
<div>${infos.title}</div>
<li>${infos.picContent}</li>
<li>${infos.content}</li>
</#list>
或者,在后台组装成 HashMap,如果分类多的话, 可以使用枚举类型:
enum InfoType{
AutoType,
ClubType,
.....................................
}
//枚举类型比较好的一点是可以方便的遍历
private Map<String,List> listMap = new HashMap();
for(InfoType infoType : InfoType.values()){
listMap.put(infoType.name(), service.getList(infoType.name()));
//把各个模块的数据组合到HashMap
}
public class InnerListVo {
/**
* 小栏目中需要展示图片的那个Order或Infomation,等
*/
private List listFirst;
/**
* 模型列表
* 内容可以是Order或Infomation,等
*/
private List list;
public Object getListFirst(int index){
if (listFirst!=null && listFirst.size()>index){
return listFirst.get(index);
}
return new HashMap();
}
}
页面中, 使用,
<#list listMap["AutoType"] as infos>
${infos.title}
</#list>
<#assign bean=listVoMap['SY_ZX_TP'].getListFirst(0)>
<#if (bean.imageUrl)??>