2011-08-27 85 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'映射。 –