Permite imaginar tengo dos páginas en mi JSF 2 aplicación: la primera página se muestra una tabla de objetos (coches o lo que sea) y otra página es capaz de mostrar los detalles de un objeto específico.
La tabla de la página es en el ámbito de petición debido a que los objetos deben ser recargada cada vez que el usuario lo solicita. La página de detalles a la vista alcance.
Así que cuando hago clic en un objeto en el interior de la tabla, este objeto debe mostrarse en la página de detalles. Con una redirección soy capaz de ir a la página de detalles, pero el detalle en la página está vacía, porque un nuevo vew se ha generado.
Ok, yo podría cambiar el ámbito de la sesión, pero esto podría conducir a otros problemas, así que me gustaría tener la página de detalles a la vista alcance. Es allí una manera de pasar de un argumento a una recién generted vista ámbito bean?

ACTUALIZACIÓN de 1

Aquí está el fragmento de código con el primer intento de utilizar parámetros de vista. Como ya se ha comentado que esto no funciona. El valor que se pasa como parámetro de la petición, pero en la página de destino el valor es null.

La tabla de la página:

<h:button value="Go to details" outcome="targetPage">
     <f:param name="carId" value="This is a test" />
</h:button>

Página de detalles:

<f:metadata>
    <f:viewParam name="carId" value="#{bean.id}" />
    <f:event type="preRenderView" listener="#{bean.loadData}"/>
</f:metadata>

Bean de página de detalles:

private String id;

public String getId() {
    return id;
}

public void setId( String id ) {
    this.id = id;
}

public void loadData() {
    System.out.println( "Id: " + id );
}

ACTUALIZACIÓN 2

He encontrado mi error. La parte de metadatos estaba dentro de un archivo de plantilla. Cuando me pongo la etiqueta en el archivo principal de la página de detalles funciona. Muchas gracias.

InformationsquelleAutor Metalhead89 | 2014-01-02

1 Comentario

  1. 11

    El uso de parámetros de vista es la manera más adecuada para su caso. Usted realmente no necesita para realizar una REDIRECCIÓN, pero una simple petición GET:

    <h:button value="Go to details" outcome="carDetails">
        <f:param name="carId" value="#{currentCar.id}" />
    </h:button>

    Este será el punto de que a esta dirección: carDetails.xhtml?carId=1

    Después de que, en su carDetails.xhtml página, agarra la vista param y carga de la información para que coche:

    <f:metadata>
        <f:viewParam name="carId" value="#{carDetailBean.carId}" />
        <f:event type="preRenderView" listener="#{carDetailBean.loadData}"/>
    </f:metadata>

    Donde CarDetailBean#loadData sólo carga la información de su coche a la pantalla con el id, ya se ha fijado en el bean.

    Ver también:

    • Gracias por su consejo. Suena bastante bien, pero unfornunately no funciona. Puedo cambiar a la página de detalle con el botón y también la CarDetailBean#loadData método se llama pero el parámetro siempre es null. También me imprime mi parámetros de Solicitud y no puedo encontrar el valor, pero en la página de destino es nulo.
    • Puedes editar tu pregunta con el código que tienes ahora?
    • Este funciona a la perfección.

Dejar respuesta

Please enter your comment!
Please enter your name here