No completar la solicitud de bean con ámbito
Frecuentes
Visto 247 equipos
3
Tengo un bean con ámbito de solicitud que se llena con varias propiedades de un formulario. Estas propiedades se utilizan luego para actualizar otro bean con ámbito de vista. Ahora quiero darle al usuario la posibilidad de restablecer el formulario de tal manera que todos los campos del formulario contengan los valores que tenían cuando la página se cargó por primera vez. Estos valores se definen a través del propio bean:
@ManagedBean
@RequestScoped
public class ItemSearchBean {
private Rarity minRarity = Rarity.None;
private Rarity maxRarity = Rarity.None;
...
}
Sin embargo, tenga en cuenta que el botón de envío del formulario en realidad invoca una solicitud ajax, por lo que no se recarga la página completa.
El botón de envío:
<p:commandButton value="Search"
actionListener="#{itemSearchBean.refreshTable}"
update="itemTable,notify"/>
Ya intenté usar un botón de reinicio simple, pero solo restableció el formulario a los últimos valores enviados:
<p:commandButton type="reset" value="Reset"/>
Uno tiene que pedirle al servidor de alguna manera un bean nuevo (o evitar que llene el bean), pero no tengo ni idea de cómo hacerlo.
2 Respuestas
2
Debería poder hacerlo con un enlace HTML simple a la misma vista:
<a href="yourpage.xhtml">Reset</a>
o deja que JSF cree el enlace por ti:
<h:link value="Reset" />
De esta manera, tendrá una nueva solicitud GET que creará una nueva UIViewRoot, como si estuviera accediendo a la misma vista en una nueva pestaña del navegador.
Si desea un botón en su lugar, puede utilizar un h:button
<h:button value="Reset" />
Este botón se basará en un Javascript que recargará la página al hacer clic.
Respondido 31 Jul 12, 14:07
1
También podrías hacer una configuración de dos fases. un poco más de trabajo, pero permite todo tipo de flujos de trabajo Deshacer si lo lleva más lejos.
básicamente, tenga dos beans que encapsulen su formulario con los pares habituales de acceso/mutador. luego, en su controlador, exponga solo uno (ya sea x o y) y ese es su "form bean". en y, almacena la copia prístina que se recupera del repositorio, de esa manera puede hacer una reversión a nivel de campo o de bean sin tener que volver a cargar la página o hacer una reorganización completa de los datos del repositorio.
tan simplemente:
- 2 beans para encapsular el formulario (incluso podría reutilizar su entidad si se asigna al formulario).
- llenar ambos desde el repositorio durante data marshall
- exponer uno al usuario en las facetas
- guarde el segundo como copia de seguridad para restablecer/revertir los campos o el formulario completo
hay otras formas de despellejar al gato "deshacer", y esta es solo otra.
Respondido 31 Jul 12, 18:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas forms jsf managed-bean or haz tu propia pregunta.
Gracias, esto funciona según lo previsto, pero ¿hay alguna forma de hacerlo también en base ajax (con suerte, no configurando cada propiedad a mano) para omitir una recarga completa de la página? - Sebastián Hoffmann
De nada. No, no que yo sepa. Pero en realidad, recargar la página no está mal, el flujo HTTP no será más simple que eso y tu código se mantiene al mínimo. :) No creo que AJAX para este tipo de cosas traiga muchas ganancias. - Elias Dorneles