ContextPathHandler配置与锚点链接冲突解决?

通过配置路径变量的方式,实现同时兼容Tocmat和本地jetty开发的资源路径问题:

(Handlers me) {
   me.add(DruidKit.())me.add(UrlSeoHandler())me.add(ContextPathHandler())}

可是在基于enjoy开发的页面中,遇到了锚点失效的问题?如下,href链接的锚点被自动加上了绝对路径。请问这个该如何使它不继承“BASE_PATH”呢?

<li><a id="a11" href="#a1">基本信息</a></li>
<li><a id="a22" href="#a2">受理条件</a></li>


评论区

JFinal

2018-09-07 16:53

这个肯定是与 enjoy 无关的,java web 规范中规定的,当你的 href、src 等等资源路径没有使用 "/" 打头时,java web 会默认为你添加上当前的路径

解决办法将路径改成以 "/" 打头即可:
href="/#a1"

轩恒

2018-09-09 09:21

@JFinal 主要这个地方是想链接的锚点,本页面的锚点,不能使用绝对路径。

轩恒

2018-09-09 10:44

【解决】锚点的话确实需要重新组装相对路径,先在controller里获取当前访问路径,然后传给前台使用。
String servletPath = this.getRequest().getServletPath();
servletPath = servletPath.substring(1,servletPath.length())+"?"+this.getRequest().getQueryString();
setAttr("servletPath",servletPath);

前台锚点使用:
<a id="a11" href="#(servletPath)#a1">基本信息</a>

JFinal

2018-09-09 14:08

这个应该是 context path 的事,在 configEngine(Engine me) 中配置一下:
me.addSharedObject("CXT", JFinal.me().getContextPath());

然后用的时候这样:
href="#(CXT)/#a1"

板砖哥

2018-09-11 17:18

赞~~~~ configEngine(Engine me) 中配置一下:
me.addSharedObject("CXT", JFinal.me().getContextPath()); 然后用的时候这样:
href="#(CXT)/#a1"