我为后台管理添加新的功能页面,浏览器请求显示时,freemarker处理新模版文件页面中的<#include "header.htm"/>,会插入default目录下的header.htm而不是default/admin/header.htm ,反复查看了各个环节未能找到原因所在,请求指教 !
我为后台管理添加新功能页面,涉及的环节如下:
1、在default/admin/menu.htm添加新功能链接,点击这个链接可以显示新功能页面;
[code=html; first-line:123]
<tr>
<td class="row1"><a id="recommTopics" class="genmed" href="${JForumContext.encodeURL("/adminRecommTopics/list")}" target="main">${I18n.getMessage("AdminTopics.index")}</a></td>
</tr>
[/code]
2、在urlPattern.properties文件中添加一行:“adminRecommTopics.list.0 =”;
即这个请求action不带参数;
3、在modulesMapping.properties中添加一行:“adminRecommTopics = net.jforum.view.admin.RecommendAction” ;
即为url :/adminRecommTopics/list请求定义对应的模块文件;
4、在源码包package net.jforum.view.admin中添加模块类:public class RecommendAction extends AdminCommand;
public class RecommendAction extends AdminCommand {
public void list() {
this.context.put("topics", DataAccessDriver.getInstance().newTopicDAO().selectRecommWaitingTopics(10));
this.setTemplateName(TemplateKeys.RECOMMEND_LIST);//新添加的,= "recommend.list";
}
}
5、在文件:templatesMapping.properties中添加新的模版文件映射关系;
添加一行定义:recommend.list = admin/recommend_list.htm
6、添加模版文件templates/default/admin/recommend_list.htm;
[code=html; first-line:1]
<#include "header.htm"/>
<form accept-charset="${encoding}" name="form" action="${JForumContext.encodeURL("/jforum")}" method="post">
<input type="hidden" name="action" value="RecommWaitingOpera" />
<input type="hidden" name="module" value="${moduleName}" />
...
[/code]
7、SystemGlobals.properties文件中的相关设置项;
# If you have freemarker templates residing outside of the JForum webapp
# you can add the path to the directory containing them here.
# Add the full path to the directory.
freemarker.extra.template.path =
...
# The template to use
template.dir = default
8、检查JForumBaseServlet类中初始话freemarker配置过程,没有新更改
[code=java;first-line:99]
// Configure the template engine
final Configuration templateCfg = new Configuration();
templateCfg.setTemplateUpdateDelay(2);
templateCfg.setSetting("number_format", "#");
templateCfg.setSharedVariable("startupTime", Long.valueOf(System.currentTimeMillis()));
// Create the default template loader
final String defaultTemplatePath = SystemGlobals.getApplicationPath() + "/templates";
final FileTemplateLoader defaultLoader = new FileTemplateLoader(new File(defaultTemplatePath));
[/code]
没有弄明白freemarker在处理default/admin/recommend_list.htm和default/forum_show.htm两个模版文件时,用什么规则分别为它们装载不同的包含文件:header.htm?