jfinal路径问题

andying 发布于 2013/12/14 20:06
阅读 7K+
收藏 1

【Gopher China万字分享】华为云的Go语言云原生实战经验!>>>

从github中下载了jfinal的demo,但这个路径问题搞得人都晕了。

我发布到Tomcat中的应用名为jfinaldemo,而我在浏览器中输入以下地址:

http://localhost:8080/jfinaldemo/

网页是出来了,但css没有生效,看了下index.jsp源码,发现是以下问题:

1.<link href="/css/manage.css" media="screen" rel="stylesheet" type="text/css" />

改成这样就行了:

2.<link href="css/manage.css" media="screen" rel="stylesheet" type="text/css" />

我决得方式1.应该是正确的,因为我输入的路径是:http://localhost:8080/jfinaldemo/

理论上是根目录应该是http://localhost:8080/jfinaldemo/应该没错呀,为什么非要换成相对路么呢?

这种jfinal是如何处理的?应怎样处理?

加载中
0
菜根乱谭
菜根乱谭
css的写法是从服务器根目录开始的,要么在这个路径前面加应用上下文路径/jfinaldemo,要么配置服务器,使其应用上下文从根目录开始,而不是从/jfinaldemo开始
0
dreamers
dreamers
contextPathHandler就可以了。这个不关jfinal的事吧,呵呵。
andying
andying
能具个例说明一下吗?thks.
0
nicecoder
nicecoder
调试还是用作者推荐的方式启动吧
0
andying
andying

我在每个页上加上绝对路径了就没问题了:

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
所有页面都加上这个basePath.

0
魔神翼
魔神翼

在configHandler函数里面加上

me.add(new ContextPathHandler("baseUrl"));

然后在页面中:<base href="${baseUrl!}/"/>

在js代码中也要加${baseUrl!},比如var prevpage="${baseUrl}/article/${prevId!}"

andying
andying
删除<a>也是引用的相对路径呀: <td style="text-align:left;">   <a href="delete/${blog.id}">删除</a>   <a href="edit/${blog.id}">修改</a> </td>
andying
andying
按你的方法,css可以解析了,但删除时报错: [WARN]-[Thread: http-8080-1]-[com.jfinal.core.ActionHandler.handle()]: 404 Action Not Found: /delete/8
0
JFinal
JFinal

    JFinal 为了避免在页面中反复写入一个类似于 baseUrl或context path这类的路径,从而降低代码量,所以一直都提倡开发者将 context path 直接设置为 "/" ,节省很多宝贵时间。

   假如开发者不嫌麻烦,完全可以将 context path 不厌其烦地加入到所有需要添加的地方,方法与传统的非 jfinal 项目完全一样。

    另外 jfinal 提供了 ContextPathHandler 让开发者可以在 view 中直接使用 context path 值,节省时间

木川瓦兹
木川瓦兹
public void configHandler(Handlers me) { me.add(new ContextPathHandler("webroot")); } 我在config文件里是这么写了 但是在freemarker里获得不到${webroot} 版本是1.6 我哪里还没写对么?
0
魔神翼
魔神翼

回复 @andying : 有些版本的IE不支持相对路径的base,用绝对路径吧。加个Interceptor,

@Override
  public void intercept(ActionInvocation ai)
  {
    String baseUrl = "/";
    Controller controller = ai.getController();

    {
      HttpServletRequest request = controller.getRequest();

      StringBuilder sb = new StringBuilder().append(request.getScheme()).append("://").append(request.getServerName());
      if (request.getServerPort() != 80)
      {
        sb.append(":").append(request.getServerPort());
      }
      sb.append(request.getContextPath());

      baseUrl = sb.toString();
    }

    controller.setAttr("baseUrl", baseUrl);

    ai.invoke();
  }



返回顶部
顶部