jfinal自带demo中如何在_layout.html加行<base href="${CONTEXT_PATH!}/"/>

bs2004 发布于 2012/03/25 15:53
阅读 7K+
收藏 13

试图在tomcat下运行demo,server.xml中配置如下:

<Context docBase="E:/WorkSpace/EclipseWorkSpace/jfinal_demo/WebRoot" path="/jfinal" reloadable="false"></Context>

打开浏览器:http://localhost:8780/jfinal/

demo中的路径会有问题(取css、js及blog路径等)

问题:默认使用freemaker,怎样将<base href="${CONTEXT_PATH!}/"/> 加入到_layout.html中并且除了inde.html页面外,其他页面引用<#include "/common/_layout.html"/>时候,<base href="${CONTEXT_PATH!}/"/> 也可以渲染正确?

我刚才的写法(这样只能在浏览index.html渲染CONTEXT_PATH才是正确的): 

public void index() {
layout();
render("/common/index.html");
}

private void layout() {
setAttr("CONTEXT_PATH", ExPath.getContextPath(getRequest()));
render("/common/_layout.html");
}

加载中
2
JFinal
JFinal

按照如下步骤可解决问题:

  • 在YourJFinalConfig中添加该ContextPathHandler,代码如下
public void configHandler(Handlers me) {
	me.add(new ContextPathHandler());
}
  • 在_layout.html 的 head标记中添加 base 标记,代码如下
<base href="${CONTEXT_PATH}/" />
  • 修改页面中的链接标签 a ,将最前面的 "/" 去掉,以下是要改的地方,可能有遗漏
<link href="css/manage.css" media="screen" rel="stylesheet" type="text/css" />
<script src="js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<li><a href=""><b>首页</b></a></li>
<li><a href="blog"><b>Blog管理</b></a></li>
<form action="blog/save" method="post">
<form action="blog/update" method="post">
<a href="blog/delete/${x.id}">删除</a>
<a href="blog/edit/${x.id}">修改</a>
  • 本质上来说context_path的问题仅与view有关,以上是JFinal提供的简单处理方案 :)


esrevinu
esrevinu
中修改么,或者说CONTEXT_PATH是怎么适配到工程名的
esrevinu
esrevinu
请问按照此方法还需要在server.xml
0
bs2004
bs2004

引用来自“JFinal”的答案

按照如下步骤可解决问题:

  • 添加一个ContextPathHandler,代码如下
public class ContextPathHandler extends Handler {
	public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandled) {
		request.setAttribute("CONTEXT_PATH", request.getContextPath());
		nextHandler.handle(target, request, response, isHandled);
	}
}

  • 在YourJFinalConfig中添加该Handler,代码如下
public void configHandler(Handlers me) {
	me.add(new ContextPathHandler());
}

  • 在_layout.html 的 head标记中添加 base 标记,代码如下
<base href="${CONTEXT_PATH}/" />

  • 修改页面中的链接标签 a ,将最前面的 "/" 去掉,以下是要改的地方,可能有遗漏

<link href="css/manage.css" media="screen" rel="stylesheet" type="text/css" />
<script src="js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<li><a href=""><b>首页</b></a></li>
<li><a href="blog"><b>Blog管理</b></a></li>
<form action="blog/save" method="post">
<form action="blog/update" method="post">
<a href="blog/delete/${x.id}">删除</a>
<a href="blog/edit/${x.id}">修改</a>

  • 本质上来说context_path的问题仅与view有关,以上是JFinal提供的简单处理方案 :)

 

参照着改好了,使用base,这样更方便省代码,十分感谢詹兄。
0
亮飞走了
亮飞走了

引用来自“JFinal”的答案

按照如下步骤可解决问题:

  • 在YourJFinalConfig中添加该ContextPathHandler,代码如下
public void configHandler(Handlers me) {
	me.add(new ContextPathHandler());
}
  • 在_layout.html 的 head标记中添加 base 标记,代码如下
<base href="${CONTEXT_PATH}/" />
  • 修改页面中的链接标签 a ,将最前面的 "/" 去掉,以下是要改的地方,可能有遗漏
<link href="css/manage.css" media="screen" rel="stylesheet" type="text/css" />
<script src="js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<li><a href=""><b>首页</b></a></li>
<li><a href="blog"><b>Blog管理</b></a></li>
<form action="blog/save" method="post">
<form action="blog/update" method="post">
<a href="blog/delete/${x.id}">删除</a>
<a href="blog/edit/${x.id}">修改</a>
  • 本质上来说context_path的问题仅与view有关,以上是JFinal提供的简单处理方案 :)


我也遇到一样的问题,按照这个解决了,注意要将<base href="${CONTEXT_PATH}/" />放到引入css、js等的前面
木禾子
木禾子
此法可行
0
逝影落枫
逝影落枫
good,  正解
0
f
flybutter
ie下好像还是有问题啊
0
车开源
车开源
新问题:我也是用这个办法,添加<base href="${CONTEXT_PATH}/"/>,也修改了引用路径,在火狐下一切OK, 换了IE9就不认base。求解!
车开源
车开源
现在就是用了笨办法,在每个url前添加${context_path}/
zengqiang041
zengqiang041
请问,现在找到解决方案了吗?
0
吕栋
吕栋
我的还 是跑不起来,按照你们说的做的,控制台报错
JFinal action report -------- 2013-11-12 13:42:34 ------------------------------
Controller  : com.demo.common.CommonController.(CommonController.java:1)
Method      : index
--------------------------
吥冷
吥冷
正常的提示。
0
hanfeng
hanfeng
我按照上面的方法修改了还是不行啊 搞不懂
0
一身正气
一身正气
@JFinal
JFinal action report -------- 2013-11-26 17:19:58 ------------------------------
Controller  : com.demo.blog.BlogController.(BlogController.java:1)
Method      : edit
UrlPara     : 2
Interceptor : com.demo.blog.BlogInterceptor.(BlogInterceptor.java:1)
--------------------------------------------------------------------------------
请问这个是报错呢?还是温馨提示?
0
dandyIder
dandyIder

引用来自“独家记忆丶梦”的答案

@JFinal
JFinal action report -------- 2013-11-26 17:19:58 ------------------------------
Controller  : com.demo.blog.BlogController.(BlogController.java:1)
Method      : edit
UrlPara     : 2
Interceptor : com.demo.blog.BlogInterceptor.(BlogInterceptor.java:1)
--------------------------------------------------------------------------------
请问这个是报错呢?还是温馨提示?
应该是温馨提示吧!
返回顶部
顶部