Spring框架<form:form>如何生成action属性?</form:form>

时间:2015-02-05 21:20:39

标签: spring forms spring-mvc

我在Spring框架的JSP页面上使用<form:form>。 当我查看生成的页面时,我看到<form action="[the path of my page]">

action="[the path of my page]"会自动添加。

我理论上可以手动编辑每个<form>以添加action=""所需属性(编辑,使用类似${root}的内容在gerrytan的答案中) ,但这不是一个实际的选择。


编辑:我不能假设/是根路径,因为它会不断变化,因为它会在代理后面。)


如何改变这种自动&#34;行为&#34;,所以我在[我的页面路径]的开头连接一条路径?

2 个答案:

答案 0 :(得分:2)

以下是我见过的两种常用方法,以及它们的优点和缺点:

始终假设上下文路径为/

你会放<form:form action="/controller1/path1"。这种方法的好处是,无论用于为页面提供服务的路径如何,URL始终引用一致的位置。但是,这意味着您的应用程序已部署到/上下文路径中。如果你不得不改变它(例如:由于反向代理/负载均衡器),那么你必须做大量的查找/替换

始终使用隐式变量

查找上下文路径

这是我的首选方法。首先定义一个jsp变量,如下所示:

<c:set var="root" value="${pageContext.request.contextPath}"/>

每当您必须引用内部路径时,请使用${root}

<form:form action="${root}/controller1/path1" ...

这种方法的缺点是必须在每个页面上声明变量${root}。但是当您更改上下文根时,请确保所有引用仍然正确

您也可以使用<spring:url><c:url>作为替代方案,甚至更好use HandlerInterceptor to make the root attribute available automatically on all views

修改 似乎${pageContext.request.servletPath}正是您正在寻找的

答案 1 :(得分:0)

我将手动更改所有表单 我将在每个JSP页面之前调用某种过滤方法填充$ {fullPathUrl}。