2011-08-27 103 views
1

我想使用EL將視圖ID轉換爲URL。JSF 2.0 - 將視圖ID轉換爲URL

這樣做的目的是使用HTML <form/>標記,使用GET而不是將表單提交到頁面。該表單的action屬性需要有一個URL,而不像<h:form/>

回答

2

這從視圖ID經由servlet容器在單一步驟中寫入的出URL:

<form action="#{facesContext.application.viewHandler.getBookmarkableURL(facesContext,view.viewId,null,false)}"> 
4

您可以使用#{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)}"> 
+0

感謝。這很明顯,我現在覺得自己像個白癡。這是第一步。我想,下一步將非常簡單:使用servlet容器對URL進行編碼。這是必要的,因爲我使用Tuckey的UrlRewriteFilter來重寫URL。我現在要自己去... –

+0

啊,對了,看到你的其他答案後,我終於明白你的意思是「編碼」。你只是想動態應用'FacesServlet'映射。這與URL編碼絕對不一樣。我編輯答案顯示一個更簡單的方法。 – BalusC

+0

該文檔暗示我們的代碼應該做同樣的事情,但實際上'getActionURL()'不會在我嘗試時應用'FacesServlet'映射。 –