JSF 2.0 - Convertir ID de vista en URL

Quiero convertir una ID de vista en una URL usando EL.

El propósito de hacer esto es usar un html <form/> etiqueta para enviar un formulario a una página utilizando GET en lugar de POST. Las formas action El atributo debe tener una URL, a diferencia de <h:form/>.

preguntado el 27 de agosto de 11 a las 17:08

2 Respuestas

Puedes usar #{request.contextPath} para alinear dinámicamente la ruta de contexto:

<form action="#{request.contextPath}/some.xhtml">

Si desea enviar al ID de vista actual, consígalo #{facesContext.viewRoot.viewId}:

<form action="#{request.contextPath}#{facesContext.viewRoot.viewId}">

O si no ha mapeado el FacesServlet on *.xhtml por alguna razón, o no quiere depender de su mapeo y su contenedor es compatible con EL 2.2 (o JBoss EL), luego use ViewHandler#getActionURL() en lugar:

<form action="#{facesContext.application.viewHandler.getActionURL(facesContext, view.viewId)}">

Respondido el 29 de diciembre de 11 a las 23:12

Gracias. Es tan obvio que ahora me siento como un idiota. Ese es el primer paso. El siguiente paso, imagino, será bastante fácil: codificar la URL usando el contenedor de servlets. Esto es necesario porque estoy reescribiendo las URL usando UrlRewriteFilter de Tuckey. Lo intentaré yo mismo ahora ... - Distortum

Ah, claro, después de ver tu otra respuesta, finalmente entiendo lo que quieres decir con "codificación". Solo desea aplicar dinámicamente el FacesServlet cartografía. Esto no es en absoluto lo mismo que la codificación de URL. Edité la respuesta para mostrar una forma más sencilla. - BalusC

La documentación implica que nuestro código debería hacer lo mismo, pero de hecho getActionURL() no aplica el FacesServlet mapeo cuando lo intento. - Distortum

Esto escribe la URL saliente desde una ID de vista a través del contenedor de servlet en un solo paso:

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

Respondido el 29 de diciembre de 11 a las 23:12

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.