主题 : jeecms3导入eclipse教程【本人测试标准可用】
级别: 白丁
UID: 5224
积分:8 加为好友
威望: 0 精华: 0
主题:0 回复:6
注册时间:2010-04-02
在线时长:0
331#   发表于:2011-07-17 21:51:06  IP:116.146.*.*
就凭此贴置顶,就得看一下
级别: 童生
UID: 9684
积分:37 加为好友
威望: 0 精华: 0
主题:0 回复:36
注册时间:2010-08-04
在线时长:0
332#   发表于:2011-07-18 10:12:33  IP:119.99.*.*
zzzzzzzzzzzzzzzzzzzzzzzzz
级别: 童生
UID: 2358
积分:30 加为好友
威望: 0 精华: 0
主题:1 回复:22
注册时间:2010-01-27
在线时长:0
333#   发表于:2011-07-18 11:11:04  IP:113.212.*.*
看看看看看看看看看
级别: 商业授权用户
UID: 21797
积分:248 加为好友
威望: 0 精华: 0
主题:37 回复:163
注册时间:2011-07-14
在线时长:0
334#   发表于:2011-07-18 11:14:28  IP:222.169.*.*
看看
级别: 童生
UID: 17561
积分:43 加为好友
威望: 0 精华: 0
主题:0 回复:46
注册时间:2011-04-01
在线时长:0
335#   发表于:2011-07-18 11:46:58  IP:124.50.*.*
JDK5+TOMCAT*+MYSQL5 及以上,具体安装过程请参考官方网站的图文说明 (《JDK+TOMCAT+MYSQL 图文安装指南》,网址是http://www.jeecms.com/hjdj/760.htm ) 
将解压后得到的jeecms-3.0.2-final文件夹下的root文件夹更名为jeecms拷贝到tomcat 安装目录下的webapps 文件夹下(例如: D:\Tomcat 6.0\webapps\),启动tomcat,在地址栏中输入http://localhost:8080/jeecms, 您将看到第一步安装过程中的《用户许可协议》,勾选“我已经阅读并同意此 协议”,点击下一步, 接下来第二步安装过程中设置系统参数,系统会自动检测出一些配置项,请根据您的实际情 况填写,数据库密码不能为空。 点击提交后进入第三步进入最后的系统安装过程,安装过程可能需要十几秒的等待时间。安 装成功后将提示信息,请再重启Tomcat 完成安装。  
Tomcat重启完毕之后,在浏览器的地址栏中输入http://localhost:8080/jeecms,  
若系统正常显示默认的站点首页则表示JEECMS 已经顺利安装完成. 
附:                                  
     系统管理后台登录:http://localhost:8080/jeecms/jeeadmin/jeecms/index.do 
     用户名:admin  
     密 码:password  

Jeecms项目导入myeclipse 
1.在myeclipse中新建一个项目jeecms,将服务器中jeecms项目下web-inf文件夹下内容拷到新建项目中 
2.解压缩jeecms-3.0.2-final-src,在src文件夹下会看到有三个压缩文件,如果只想进行普通的二次开发,可以只导入cms这个源码,删除jeecms-cms-identity-3.0.2-final.jar即可,如果想进行深入的二次开发,需要导入common和core源码,另导入common-lib下的jar包,删除jeecms-cms- identity-3.0.2-final.jar,jeecms-common-3.0.2-final.jar ,jeecms-core- identity-3.0.2-final.jar这三个jar包,切记:务必进行build path 
3.修改jdbc链接,自己导入数据库。  
4.把服务器下install\config下的web.xml复制出来覆盖掉新建项目WEB-INF下的web.xml 
5.classes下有四个文件,手动烤到myeclipse项目src根目录下中 
6.将服务器上jeecms项目删掉,发布新建的jeecms项目。 

首页的加载过程: 
在浏览器中输入http://localhost:8080/jeecms,回车 
首先进入配置文件web.xml, 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<!----> 
<param-value> 
/WEB-INF/config/application-context.xml 
/WEB-INF/config/cache-context.xml 
/WEB-INF/config/captcha-context.xml 
/WEB-INF/config/jeecore-context.xml 
/WEB-INF/config/jeecms-context.xml 
</param-value> 
</context-param> 

应用范围内的初始化参数 
其中jeecms-context.xml是对标签的初始化 

<welcome-file-list> 
<welcome-file>index.html</welcome-file> 
<welcome-file>index.shtml</welcome-file> 
<welcome-file>index.jhtml</welcome-file> 
</welcome-file-list> 
通过以上标签找到应该加载哪一个页面 

<servlet> 
<servlet-name>JeeCmsFront</servlet-name> 
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<init-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/config/jeecms-servlet-front.xml</param-value> 
</init-param> 
<load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>JeeCmsFront</servlet-name> 
<url-pattern>*.jhtml</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
<servlet-name>JeeCmsFront</servlet-name> 
<url-pattern>*.jspx</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
<servlet-name>JeeCmsFront</servlet-name> 
<url-pattern>*.jsp</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
<servlet-name>JeeCmsFront</servlet-name> 
<url-pattern>*.htm</url-pattern> 
</servlet-mapping> 

通过servlet配置,可以找到jeecms-servlet-front.xml,在此配置文件的最后有 
<import resource="jeecms-servlet-front-action.xml"/>代码 
找到jeecms-servlet-front-action.xml,在此配置文件中有 
<bean id="dynamicAct" class="com.jeecms.cms.action.front.DynamicPageAct"/> 
可以找到类DynamicPageAct,此类是首页模板。 
在类DynamicPageAct中有 
public static final String TPL_INDEX = "tpl.index"; 
找到WEB-INF\languages\jeecms_front下messages_zh_CN.properties配置文件,可以找到对应的首页面 
tpl.index=首页(工程中的首页.html文件) 



标签的配置流程,以cms_content_list为例 
首先,每一个标签的声明都是在jeecms-context.xml中进行的, 
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" 
default-lazy-init="true"> 
…… 
<bean id="cms_content_list" class="com.jeecms.cms.action.directive.ContentListDirective"/>(声明标签对应的类) 
<bean id="staticPageSvc" class="com.jeecms.cms.staticpage.StaticPageSvcImpl"> 
<property name="freeMarkerConfigurer"> 
<bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
<property name="freemarkerVariables"> 
<map> 
…… 
<entry key="cms_content_list" value-ref="cms_content_list"/> 
…… 
</map> 
</property> 
<property name="templateLoaderPath" value=""/> 
…… 
</bean> 
</property> 
</bean> 
</beans> 
此外,在配置文件jeecms-servlet-front.xml中,还有一段对标签的配置 
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> 
<property name="freemarkerVariables"> 
<map> 
…… 
<entry key="cms_content_list" value-ref="cms_content_list"/> 
…… 
   </map> 
</property> 
         …… 
</bean> 

</bean>类ContentListDirective继承自AbstractContentDirective,最主要的是execute方法 
public class ContentListDirective extends AbstractContentDirective { 
/** 
 * 模板名称 
 */ 
public static final String TPL_NAME = "content_list"; 

/** 
 * 输入参数,文章ID。允许多个文章ID,用","分开。排斥其他所有筛选参数。 
 */ 
public static final String PARAM_IDS = "ids"; 

@SuppressWarnings("unchecked") 
public void execute(Environment env, Map params, TemplateModel[] loopVars, 
TemplateDirectiveBody body) throws TemplateException, IOException { 
//获取站点 
CmsSite site = FrontUtils.getSite(env); 
//获取内容列表,可以通过此处进行更改,获取自己数据库中的数据 
List<Content> list = getList(params, env); 

Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>( 
params); 
//OUT_LIST值为tag_list,在类DirectiveUtils中声明,将内容列表放入其中 
paramWrap.put(OUT_LIST, DEFAULT_WRAPPER.wrap(list)); 
//将params的值复制到variable中 
Map<String, TemplateModel> origMap = DirectiveUtils 
.addParamsToVariable(env, paramWrap); 
//获取的是参数PARAM_TPL,是否调用模板以及调用的模板类型 
InvokeType type = DirectiveUtils.getInvokeType(params); 
//获取传入参数,列表样式,根据不同的参数获取不同的样式列表 
String listStyle = DirectiveUtils.getString(PARAM_STYLE_LIST, params); 
if (InvokeType.sysDefined == type) { 
if (StringUtils.isBlank(listStyle)) { 
throw new ParamsRequiredException(PARAM_STYLE_LIST); 

//列表样式模板 
env.include(TPL_STYLE_LIST + listStyle + TPL_SUFFIX, UTF8, true); 
} else if (InvokeType.userDefined == type) { 
if (StringUtils.isBlank(listStyle)) { 
throw new ParamsRequiredException(PARAM_STYLE_LIST); 

//列表样式模板路径 WEB-INF\t\cms_sys_defined\style_list\style_2-1.html 
FrontUtils.includeTpl(TPL_STYLE_LIST, site, env); 
} else if (InvokeType.custom == type) { 
//这个模板就是自己声明的,即content_list.html,如果采用自定义模板的话,页面中可以只写上标签,并添加上标签内需要的几个参数,不需要写标签体的内容,会去自动调用模板中的标签体。 
FrontUtils.includeTpl(TPL_NAME, site, params, env); 
} else if (InvokeType.body == type) { 
body.render(env.getOut()); 
} else { 
throw new RuntimeException("invoke type not handled: " + type); 

//将variable中的params值移除 
DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap); 


@SuppressWarnings("unchecked") 
protected List<Content> getList(Map<String, TemplateModel> params, 
Environment env) throws TemplateException { 
Integer[] ids = DirectiveUtils.getIntArray(PARAM_IDS, params); 
if (ids != null) { 
//根据内容ID数组获取文章列表 
return contentMng.getListByIdsForTag(ids, getOrderBy(params)); 
} else { 
return (List<Content>) super.getData(params, env); 



@Override 
protected boolean isPage() { 
return false; 



Content_list.html中的内容 
[#list tag_list as a] 
<li><a href="${a.url}" target="_blank">${a.title}</a></li> 
[/#list] 
就是简单的将tag_list中的内容,即“paramWrap.put(OUT_LIST, DEFAULT_WRAPPER.wrap(list));”中放入的数据遍历出来 

style_2-1.html中的内容 主要是对图文列表或标题列表向上滚动的样式的,其中包含两个同样为样式的文件 
style_2-1_core.html(图文列表或标题列表向上滚动)和style_1-1_core.html(图文列表或标题列表向上滚动),在此就不做赘述了。 

Jeecms是基于Spring注解,在自定义标签时对于*类和dao service等注意注解的问题。 

下面是我自己定义的标签mycontent_list的实现过程 

首先,在数据库里创建了一个jc_mycontent的表,其中有id,title,content三个字段 
其次,创建了一个*类 
public class MyContent { 
private static final long serialVersionUID = 1L; 
private Integer id; 
private String title; 
private String content; 
public MyContent () { 
super(); 

……get set方法 

接下来是配置hibernate中jc_mycontent表的配置文件 
<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="com.jeecms.cms.entity.main"> 
<class name="MyContent" table="jc_mycontent"> 
<meta attribute="sync-DAO">false</meta> 
<cache usage="read-write"/> 
<id name="id" type="java.lang.Integer" column="id"><generator class="identity"/></id> 
<property name="title" column="title" type="java.lang.String" not-null="true" /> 
<property name="content" column="content" type="java.lang.String" not-null="true" /> 
</class> 
</hibernate-mapping> 

与数据库交互的持久层接口 
public interface MyContentDao { 
public List<MyContent> getList(); 

持久层实现类 
@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; 


业务层接口 
public interface MyContentMng { 
public List<MyContent> getList(); 

业务层实现类 
@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; 


标签类的抽象类,最主要的就是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; 

自定义标签中最重要的类继承上边的抽象类 
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); 
//OUT_LIST值为tag_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(); 


样式模板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] 

首页里加入如下代码 
[@cms_mycontent_list] 
   <ul class="topnews"> 
   </ul> 
[/@cms_mycontent_list] 
通过以上这些代码,可以实现将自己的表jc_mycontent中的数据查询并显示在页面上
级别: 童生
UID: 21891
积分:22 加为好友
威望: 0 精华: 0
主题:1 回复:12
注册时间:2011-07-18
在线时长:0
336#   发表于:2011-07-18 12:52:08  IP:113.193.*.*

求知识。
级别: 白丁
UID: 14511
积分:7 加为好友
威望: 0 精华: 0
主题:0 回复:6
注册时间:2011-01-06
在线时长:0
337#   发表于:2011-07-18 21:58:27  IP:111.84.*.*
来学习
级别: 白丁
UID: 21849
积分:8 加为好友
威望: 0 精华: 0
主题:0 回复:9
注册时间:2011-07-16
在线时长:0
338#   发表于:2011-07-19 00:32:51  IP:122.13.*.*
级别: 童生
UID: 16128
积分:27 加为好友
威望: 0 精华: 0
主题:0 回复:25
注册时间:2011-02-24
在线时长:0
339#   发表于:2011-07-19 09:43:10  IP:59.59.*.*
just a look!
级别: 童生
UID: 20162
积分:13 加为好友
威望: 0 精华: 0
主题:0 回复:12
注册时间:2011-05-31
在线时长:0
340#   发表于:2011-07-19 14:20:35  IP:59.77.*.*
dsfgsdfgs