2015-02-05 65 views
0

我在Spring框架的JSP頁面上使用<form:form>。 當我查看生成的頁面時,我看到<form action="[the path of my page]">Spring框架<form:form>它是如何生成操作屬性的?

action="[the path of my page]"是自動添加的。 (:使用gerrytan的回答有點像${root}編輯),但是這不會是一個可行的選擇

我理論上可以手動編輯每個<form>添加action=""所需的屬性。


編輯:我不能假設/是根路徑,因爲它會不斷變化,因爲它是在一個代理)


我怎樣才能改變這種自動「行爲」,所以我在[我的頁面路徑]的開頭連接一個路徑?

回答

0

我將手動修改所有表格爲 ,我將在每個JSP頁面之前調用的某種過濾器方法中填充$ {fullPathUrl}。

1

下面是我見過的使用以及它們的優點和缺點2種常見的方法:

總是假定上下文路徑是/

你會把<form:form action="/controller1/path1"。這種方法的好處是URL始終指向一致的位置,而不管用於提供頁面的路徑。但是這意味着您的應用程序已部署到/上下文路徑中。如果你不得不改變這一點(例如:由於反向代理/負載均衡器),那麼你就必須做噸的find /替換

使用隱式變量

這始終是查找上下文路徑我首選方法。首先定義一個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}就是你'尋找

+0

非常感謝你,但這些解決方案都沒有可用的選項(我編輯我的帖子)。 – evg02gsa3 2015-02-05 22:20:29

+1

'$ {pageContext.request.servletPath}'你在找什麼? – gerrytan 2015-02-05 23:06:07

+0

是的,我會用一些非常相似的東西。謝謝。 – evg02gsa3 2015-02-06 14:24:09