GitHub托管

    350万的开发者齐聚的国际知名代码托管平台,程序员的Facebook...

    Coding码市

    Coding.net 是一个面向开发者的云端开发平台...

    开源中国

    开源中国社区团队推出的基于Git的快速的、免费的、稳定的在线代码托管平台...

自定义标签mycontent_list实现

1. 创建表jc_mycontent

     三个字段id,title,content。

2. 创建实体类

 

 1 public class MyContent {
 2 private static final long serialVersionUID = 1L;
 3 private Integer id;
 4 private String title;
 5 private String content;
 6 public MyContent () {
 7 super();
 8 }
 9 ……get set方法
10 }

 

3. 配置hibernate中jc_mycontent表的配置文件

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 3 <hibernate-mapping package="com.jeecms.cms.entity.main">
 4 <class name="MyContent" table="jc_mycontent">
 5 <meta attribute="sync-DAO">false</meta>
 6 <cache usage="read-write"/>
 7 <id name="id" type="java.lang.Integer" column="id"><generator class="identity"/></id>
 8 <property name="title" column="title" type="java.lang.String" not-null="true" />
 9 <property name="content" column="content" type="java.lang.String" not-null="true" />
10 </class>
11 </hibernate-mapping>

4. DAO接口

 1 public interface MyContentDao { 2 public List<MyContent> getList(); 3 } 

5. DAOImpl

@Repository//持久层
public class MyContentDaoImpl extends HibernateBaseDao<MyContent, Integer>
implements MyContentDao {
@SuppressWarnings("unchecked")
public List<MyContent> getList(){
return find(byNothing());
}
private Finder byNothing(){
Finder f = Finder.create();
f.append("from MyContent");//可以在此处添加查询条件或者添加各种方法进行动态查询
f.setCacheable(true);
return f;
}

@Override
protected Class<MyContent> getEntityClass() {
return MyContent.class;
}
}

  6. service接口

public interface MyContentMng {
public List<MyContent> getList();
}

  7.serviceImpl

@Service//业务层
@Transactional
public class MyContentMngImpl implements MyContentMng {

@Transactional(readOnly = true)//配置事务为只读
public List<MyContent> getList(){
return myContentDao.getList();
}
private MyContentDao myContentDao;
@Autowired//自动绑定
public void setMyContentDao(MyContentDao myContentDao) {
this.myContentDao = myContentDao;
}
private List<ContentListener> listenerList;
@Autowired
public void setListenerList(List<ContentListener> listenerList) {
this.listenerList = listenerList;
}
}

  8. 标签类的抽象类

最主要的就是getData这个方法,以及绑定业务层(其中也可以添加多种查询方法,可参考类AbstractContentDirective )。

public abstract class AbstractMyContentDirective implements
TemplateDirectiveModel {
protected Object getData(Map<String, TemplateModel> params, Environment env)
throws TemplateException {
return myContentMng.getList();
}
@Autowired
protected MyContentMng myContentMng;
}

  9.自定义标签中最重要的类继承抽象类

public class MyContentListDirective extends AbstractMyContentDirective {

public static final String TPL_NAME = "mycontent_list";
@SuppressWarnings("unchecked")
public void execute(Environment env, Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
//获取站点
CmsSite site = FrontUtils.getSite(env);
//获取内容列表
List<MyContent> list = getList(params, env);
Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>(params);
//MYOUT_LIST值为mytag_list,将内容列表放入其中
paramWrap.put(MYOUT_LIST, DEFAULT_WRAPPER.wrap(list));
//将params的值复制到variable中
Map<String, TemplateModel> origMap = DirectiveUtils.addParamsToVariable(env, paramWrap);
//没有采用默认的模板,直接采用自己写的简单的模板(mycontent_list.html)
FrontUtils.includeTpl(TPL_NAME, site, params, env);
//将variable中的params值移除
DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap);
}
protected List<MyContent> getList(Map<String, TemplateModel> params,
Environment env) throws TemplateException {
return myContentMng.getList();
}
}

  

注:1).在Freemarker标签工具类DirectiveUtils下定义输出参数(列表数据):MYOUT_LIST
      public static final String MYOUT_LIST = "mytag_list";

     2).每一个标签(如cms_mycontent_list)的声明都是在jeecms-context.xml中进行的,还要     记得Manager、DAO的bean配置

   此外,在配置文件jeecms-servlet-front.xml中,还有一段对标签的配置.

10. 在WEB-INF\t\cms\www\red\tag下新建模板mycontent_list.html,并加入如下代码(里边也可以自己添加一些样式,可参考\t\cms_sys_defined\style_list下样式文件)

[#list mytag_list as a]
<li><a href="${a.title}"><font color='blue'>"${a.content}"</font></a></li>
[/#list]


11.在WEB-INF\t\cms\www\red\index下首页.html里加入如下代码

[@cms_mycontent_list]
   <ul class="topnews">
   </ul>
[/@cms_mycontent_list]


--END--

 

posted @ 2017-08-14 11:07  Keis  阅读(625)  评论(0编辑  收藏  举报