我想使用EL將視圖ID轉換爲URL。JSF 2.0 - 將視圖ID轉換爲URL
這樣做的目的是使用HTML <form/>
標記,使用GET
而不是將表單提交到頁面。該表單的action
屬性需要有一個URL,而不像<h:form/>
。
我想使用EL將視圖ID轉換爲URL。JSF 2.0 - 將視圖ID轉換爲URL
這樣做的目的是使用HTML <form/>
標記,使用GET
而不是將表單提交到頁面。該表單的action
屬性需要有一個URL,而不像<h:form/>
。
這從視圖ID經由servlet容器在單一步驟中寫入的出URL:
<form action="#{facesContext.application.viewHandler.getBookmarkableURL(facesContext,view.viewId,null,false)}">
您可以使用#{request.contextPath}
動態內聯上下文路徑:如果你的避風港」
<form action="#{request.contextPath}#{facesContext.viewRoot.viewId}">
或者:
<form action="#{request.contextPath}/some.xhtml">
如果你要提交到當前視圖ID,通過#{facesContext.viewRoot.viewId}
得到它t出於某種原因在*.xhtml
上映射了FacesServlet
,或者您不希望依賴其映射,並且您的容器支持EL 2.2(或JBoss EL),則使用ViewHandler#getActionURL()
代替:
<form action="#{facesContext.application.viewHandler.getActionURL(facesContext, view.viewId)}">
感謝。這很明顯,我現在覺得自己像個白癡。這是第一步。我想,下一步將非常簡單:使用servlet容器對URL進行編碼。這是必要的,因爲我使用Tuckey的UrlRewriteFilter來重寫URL。我現在要自己去... –
啊,對了,看到你的其他答案後,我終於明白你的意思是「編碼」。你只是想動態應用'FacesServlet'映射。這與URL編碼絕對不一樣。我編輯答案顯示一個更簡單的方法。 – BalusC
該文檔暗示我們的代碼應該做同樣的事情,但實際上'getActionURL()'不會在我嘗試時應用'FacesServlet'映射。 –