2010-01-17 26 views
14

Lo que estoy buscando es tener una etiqueta f: param con un Objeto de mi propia elección en el atributo de valor. Luego, en el método del bean de respaldo para la acción, me gustaría poder sacar este objeto de la solicitud. (Lo siento si mi terminología no es tan buena, soy nuevo en JSF).¿Puedo "pasar" un objeto con una etiqueta param JSF?

Ahora, puedo pasar cadenas en los parámetros de solicitud muy bien. También me doy cuenta de que un parámetro siempre va a ser una cadena en el http get o post, así que no estoy realmente pasando un objeto java. También me doy cuenta de que una forma de hacer esto sería pasar un "id" de algún tipo que el bean de respaldo podría utilizar para identificar el Objeto en cuestión.

Lo que me pregunto, sin embargo, es si JSF me permitirá hacerlo de forma transparente. ¿Puedo especificar cualquier objeto como el valor de param y luego simplemente buscarlo desde RequestMap en un método de acción?

Respuesta

20

No puede hacer eso con <f:param>. Debe adjuntarse a la URL de la solicitud, por lo que realmente debe ser un String. Simplemente use <f:setPropertyActionListener> en su lugar.

E.g.

<h:commandLink value="Submit" action="#{bean.submit}"> 
    <f:setPropertyActionListener target="#{bean.otherBean}" value="#{otherBean}" /> 
</h:commandLink> 

De esta manera el #{otherBean} es sólo disponible como this.otherBean dentro submit() método. De esta forma tampoco necesita meterse con el mapa de parámetros de solicitud (para el cual en el caso de <f:param> preferiría haber usado inyección de propiedad administrada con #{param.name} en su lugar).

Las alternativas están usando <h:inputHidden> en combinación con Converter o usando Tomahawk's <t:saveState>. También vea this blog article para más información de fondo y ejemplos.

+0

Bien, me condenarán, eso es exactamente lo que estaba buscando. ¡Gracias! –

Cuestiones relacionadas