form表单提供后进入Controller的一个方法,如果有错重定向到错误页面。有点问题。

form表单的action属性访问Contoller的一个方法。如果该方法正常执行,还是转发到form表单所在的jsp。如果出错,重定向到一个错误页面。为什么出错时,重定向到错误页面,显示了错误页面的内容,但是没有加载错误页面的css样式,而且此时浏览器地址栏里面显示的是form表单的action属性中的url,而不是期望错误页面的真实地址(不是redirect里面期望的重定向地址)。

评论区

JFinal

2016-10-13 10:51

页面的资源路径使用绝对路径,而不是相对路径,要么以 http/https 打头,要么以 "/" 打头。

因为如果使用相对路径, java web 的规范,会让资源文件的最终路径随着浏览器中的 url 变化,此外,部署方式参考这里,避免一些坑:https://my.oschina.net/jfinal/blog/353062

lidongxing2016

2016-10-13 11:09

@JFinal 我都用的是绝对路径。Controller里面的方法写了这样的重定向语句 redirect("/agency/jsp/error/reqerror.jsp"); agency是WebRoot下面的文件夹名。reqerror.jsp页面里面的文字显示了。但是样式没有加载。这是错误页面的样式路径href="${ pageContext.request.contextPath }/agency/css/error.css" 。 如果直接浏览器地址栏访问错误页面,可以加载样式。标准的redirect方法成功后,浏览器的地址栏应该显示 重定向文件的真实绝对路径呀???

JFinal

2016-10-13 11:29

@lidongxing2016 手动在浏览器输入 "localhost/agency/jsp/error/reqerror.jsp" 是什么结果? 应该会是同样的错误,这个跟 jfinal 无关了,因为 redirect(url) 仅仅是通知浏览器向 url 发起个请求而已

此外,不建议 redirect 到 jsp 文件,建议所有动态请求全走 action,先建一个 action,然后在这个 action 中使用 render(xxx.jsp) 而非 redirect

JFinal

2016-10-13 11:49

@lidongxing2016 补充一下前面的,在建好 action 以后,使用 redirect(actionKey) 重定向到 action ,而不是 redirect(xxx.jsp) 重定向到 jsp

lidongxing2016

2016-10-13 11:50

@JFinal http://localhost:8080/wxmobile/agency/jsp/error/reqerror.jsp其中wxmobile是项目名。显示正常,有样式。

lidongxing2016

2016-10-13 11:52

@JFinal 但是redirect("/agency/jsp/error/reqerror.jsp")没有样式,只有reqerror.jsp里面的文字。而且此时地址栏显示的还是Controller的访问路径。

JFinal

2016-10-13 12:03

@lidongxing2016 此外,你的 content path 没有设置为 "",所以掉进了这个坑,前面告知过要看这篇博文: https://my.oschina.net/jfinal/blog/353062

JFinal

2016-10-13 12:04

context path 是个极其鸡肋的设计,很多人因此犯错,模板中的路径因此而被搞糊涂,只有彻底弃用 context path 才能避免这类问题

lidongxing2016

2016-10-13 15:37

@JFinal 谢谢!!!

lidongxing2016

2016-10-17 08:35

@JFinal 不是错误。导致的原因是我前端用了jquery mobile。而jquery mobile的form和a标签默认是以ajax提交的,把form和a加一个data-ajax="false"重定向的页面css就能正常加载了。正常了。

热门反馈

扫码入社