我的应用可以在http://serverA/m/或http://serverA/mobile/运行。我有一个带有搜索表单的共享标题,需要转到http://serverA/ installationName / search。
但是,如果我使用<form action="/search">
,它将转到服务器的根目录,而不是tomcat应用程序。
如果我使用<form action="search">
,它会转到相对于当前页面的路径。 (即http://serverA/m/someOtherPage/search
我已尝试过<c:url value="search">
和<c:url value="/search">
,但它们似乎都没有效果。
在intelliJ中,<c:url value="/search">
给了我“无法解析控制器URL /搜索”,即使我有一个用@RequestMapping定义的控制器(“/ search”)
答案 0 :(得分:7)
<form action="<c:url value="/search" />" />
使用<c:url>
就是这样。忽略IDE告诉你的内容。他们并不擅长这一点。试试吧。
答案 1 :(得分:4)
Bozho是对的。我也使用了HTML BASE标记:
<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/" />
如果您可以将此标记放在几个地方(理想情况下只在一个JSP中),您可以使代码更清晰。
答案 2 :(得分:2)
您可以(除了其他响应者提示)也使用Spring JSP标记(spring:url),它是在JSTL c:url标记之后建模的(参见Bozhos回复)。 tld参考:
这个mvc:resources块的底部用于示例:
答案 3 :(得分:0)
如果您的表单标记是jsp标记(可能是&lt; sf:form&gt;),您将无法直接在属性中嵌入c:url标记。
在那种情况下,我会做以下事情:
<c:url var="someName" value="some uri value"/>
<sf:form path="${someName}" ...>