URL absoluta en el botón JSF

Tengo este botón en el encabezado que incluyo en muchas páginas:

<input type="button" value="My Button" onclick="window.location.href='mypage.xhtml'"

Utiliza una ruta relativa y funciona si la página de la persona que llama está en el mismo directorio. ¿Cómo puedo usar la ruta absoluta o usar la etiqueta commandButton? Probé con:

/mypage.xhtml

No funciona (error 404)

preguntado el 21 de mayo de 12 a las 18:05

2 Respuestas

Deje que EL imprima el ruta de contexto dinamicamente. Se volverá relativo a la raíz del dominio.

<input type="button" value="My Button" onclick="window.location.href='#{request.contextPath}/mypage.xhtml'">

O, mejor, simplemente use el propio JSF <h:button> componente que genera el mismo HTML de todos modos en el que no necesita preocuparse por la ruta de contexto.

<h:button value="My Button" outcome="/mypage.xhtml" />

Si necesita pasar algún parámetro de solicitud, puede usar <f:param> para eso.

<h:button value="My Button" outcome="/mypage.xhtml">
    <f:param name="foo" value="bar" />
</h:button>

No use el <h:commandButton>. No envía una solicitud GET normal, sino una solicitud POST que debe redirigir y, por lo tanto, efectivamente termina con dos solicitudes HTTP en las que todos los parámetros de solicitud se pierden en la segunda.

contestado el 21 de mayo de 12 a las 19:05

Entonces, si desea usar el botón de comando JSF para viajar a alguna página en su proyecto, necesita usar el atributo de acción, incluso puede pasar parámetros:

<h:commandButton action="/es/details.jsf?faces-redirect=true" value="details">
    <f:attribute name="id" value="#{bean.id}" />
</h:commandButton>

Si desea viajar a una página fuera de su aplicación, deberá agregar un código Java adicional en algún lugar de un bean de respaldo y luego activarlo desde el extremo frontal.

FacesContext.getCurrentInstance().getExternalContext().redirect("http://google.com";);

Nota: no necesita javascript para esta tarea

contestado el 21 de mayo de 12 a las 19:05

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