我想使用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'映射。 –