Sincronización de páginas en la barra de direcciones en una aplicación web utilizando JSF2

StackOverflow https://stackoverflow.com/questions/7306896

  •  26-10-2019
  •  | 
  •  

Pregunta

Estoy trabajando en una aplicación JSF2 y tengo un problema con el nombre de la página que se muestra en la barra de direcciones. Cuando navego a otra página que tengo en la dirección del nombre de la página anterior.

Gracias.

¿Fue útil?

Solución

Esto se debe a que está utilizando POST en lugar de obtener la navegación de página a página y JSF predeterminado se envía a la misma vista con el que está utilizando <h:form>. El uso de la publicación para la navegación de página a página es en cualquier caso un enfoque muy pobre. No solo no es fácil de usar (no es marcable y confuso), sino que tampoco es amigable con SEO (SearchBots no sigue <form> comportamiento).

Para resolver este problema, debe dejar de usar <h:commandLink> para navegación de página a página. Usar <h:link> en cambio.

<h:link value="Go to next page" outcome="nextpage" />

Esto solo renderizará un

<a href="/contextpath/nextpage.xhtml">Go to next page</a>

Lo cual es perfectamente marcable, fácil de usar y amigable con el SEO.

Cuando estás navegando a una página diferente como resultado de un formulario de publicación real, también lo reemplazaría devolviendo null o void Y simplemente rinde el resultado/mensajes condicionalmente en la misma vista. O si se supone que el resultado es marcable (por ejemplo, resultados de búsqueda), debe usar enlaces normales o simples <form> en vez de <h:form> y use <f:viewParam> En la vista del objetivo.

Ver también:

Otros consejos

Esto es más tardío porque, en JSF, cuando está navegando a una nueva página, el servidor está realizando un reenvío a la nueva página. El navegador desconoce el reenvío y muestra la URL anterior. Para que el servidor realice una redirección en lugar de reenviar, debe:

Si está utilizando reglas de navegación, agregue un <redirect/> a cada regla:

<navigation-rule>
   <from-view-id>/pages/from.xhtml</from-view-id>
      <navigation-case>
    <from-outcome>to</from-outcome>
        <to-view-id>/pages/to.xhtml</to-view-id>
        <redirect/>
    </navigation-case>
</navigation-rule>

Si está devolviendo un resultado de un método de frijoles, agregue un ?faces-redirect=true al resultado:

public String navigate() {
   return "/pages/to?faces-redirect=true";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top