Spring框架<form:form>它是如何生成action属性的?
Spring framework <form:form> how does it generate the action attribute?
我在 JSP 页面上使用 <form:form>
Spring 框架。
当我查看生成的页面时,我看到 <form action="[the path of my page]">
.
action="[the path of my page]"
自动添加。
理论上我可以手动编辑每个 <form>
以添加 action=""
所需的属性(编辑: 在 gerrytan 的回答中使用 ${root}
之类的东西),但这不是一个实用的选择。
编辑: 我不能假设 /
是根路径,因为它会不断变化,因为它在代理后面。)
如何更改此自动 "behavior",以便在 [我的页面路径] 的开头连接一个路径?
以下是我见过的两种常用方法及其优缺点:
始终假定上下文路径为 /
你会放 <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}
就是你要找的东西
我将手动更改所有表格
我将在每个 JSP 页之前调用的某种过滤方法中填充 ${fullPathUrl}。
我在 JSP 页面上使用 <form:form>
Spring 框架。
当我查看生成的页面时,我看到 <form action="[the path of my page]">
.
action="[the path of my page]"
自动添加。
理论上我可以手动编辑每个 <form>
以添加 action=""
所需的属性(编辑: 在 gerrytan 的回答中使用 ${root}
之类的东西),但这不是一个实用的选择。
编辑: 我不能假设 /
是根路径,因为它会不断变化,因为它在代理后面。)
如何更改此自动 "behavior",以便在 [我的页面路径] 的开头连接一个路径?
以下是我见过的两种常用方法及其优缺点:
始终假定上下文路径为 /
你会放 <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}
就是你要找的东西
我将手动更改所有表格 我将在每个 JSP 页之前调用的某种过滤方法中填充 ${fullPathUrl}。