转 http://1985wanggang.blog.163.com/blog/static/776383320101113115750146/
JEECMS v3.0.1 beta版发布,采用的是采用hibernate3+spring mvc+spring2+freemarker主流技术架构.
再对前台配置文件进行分析jeecms-servlet-front.xml
加载的资源文件
<bean id="messageSource"class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="cacheSeconds" value="0"/> <property name="basenames"> <list> <value>/WEB-INF/languages/jeecms_front/messages</value> <value>/WEB-INF/languages/fck/messages</value> </list> </property> </bean> |
/WEB-INF/languages/jeecms_front/messages
/WEB-INF/languages/fck/messages
因为前台和后台是分离的两个独立的
Springmvc messageSource中只加载front前台的资源文件
messages_cn.properties
#专题模板 tpl.topicIndex=专题导航页 tpl.topicChannel=专题栏目页 tpl.topicDefault=专题默认页
#专用模板 tpl.tagIndex=标签导航页 tpl.tagDetail=标签详情页 tpl.searchInput=搜索输入页 tpl.searchResult=搜索结果页 tpl.commentPage=评论页 tpl.rss=RSS |
模板页面都是中文名称,如
/WEB-INF/t/cms/www/red/index/首页.html
#客户端包含模板
tpl.index=首页
在程序中使用tpl.index最后对应模板中的”首页.html”的”首页”
如FrontUtils.getTplPath(request, site.getSolutionPath(),
"index", "tpl.index");
中
public static String getTplPath(HttpServletRequest request, String solution, String dir, String name) { return solution + "/" + dir + "/" + MessageResolver.getMessage(request, name, new Object[0]) + ".html"; } |
public static String getTplPath(HttpServletRequest request, String solution, String dir, String name) { return solution + "/" + dir + "/" + MessageResolver.getMessage(request, name, new Object[0]) + ".html"; } |
使用multipartResolver视图解析器
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
|
配置拦截器
<beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors"> <list> <ref bean="frontContextInterceptor"/> <ref bean="frontLocaleInterceptor"/> </list> </property> </bean> |
FrontContextInterceptor.java
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException { CmsSite site = null; List<CmsSite> list = this.cmsSiteMng.getListFromCache(); int size = list.size(); if (size == 0) throw new RuntimeException("no site record in database!"); if (size == 1) { site = (CmsSite)list.get(0); } else { String server = request.getServerName();
for (CmsSite s : list) { if (s.getDomain().equals(server)) { site = s; break; }
String alias = s.getDomainAlias(); if (!StringUtils.isBlank(alias)) { for (String a : StringUtils.split(alias, ',')) { if (a.equals(server)) { site = s; break; } } }
String redirect = s.getDomainRedirect(); if (!StringUtils.isBlank(redirect)) { for (String r : StringUtils.split(redirect, ',')) { if (!r.equals(server)) continue; try { response.sendRedirect(s.getUrl()); } catch (IOException e) { throw new RuntimeException(e); } return false; } } }
if (site == null) { throw new SiteNotFoundException(server); } }
CmsUtils.setSite(request, site);
CmsUser user = null; Integer userId = this.authMng.retrieveUserIdFromSession(this.session, request); if (userId != null) { user = this.cmsUserMng.findById(userId); }
if (user != null) { CmsUtils.setUser(request, user); } return true; }
|