problem selecting row with f:param
i92jurir Aug 21, 2012 6:45 AMHi,
I´m having a problem selecting a row from a datatable. I know it´s a very common task in web applications but I have tried a lot of ways and I can´t make it work anyway.
The page with the datatable is:
<rich:dataTable value="#{hoteles}" var="hot">
<h:column id="column1">
<f:facet id="NameFacet" name="header">Nombre</f:facet>
#{hot.nombre}
</h:column>
<h:column id="column2">
<f:facet id="NameFacet" name="header">Seleccionar</f:facet>
<s:link value="Reservar" view="/reservarPaso1.xhtml" propagation="begin"> <!-- Link to booking page. We start a LRC -->
<f:param name="hotelSeleccionado" value="#{hot}"/> <!-- We pass the selected row -->
</s:link>
</h:column>
</rich:dataTable>
My idea is pass the selected row (the hotel) with a page paramameter to a booking page. #{hoteles} is populated with this method triggered with a page action:
public void buscarHoteles() {
// Hacemos la busqueda
hoteles = entityManager.createQuery("select h from Hotel h").getResultList();
}
The target page (booking page) is:
...
<h:form id="reservarPaso1Form">
<rich:panel>
<f:facet name="header">Paso 1</f:facet>
<s:decorate id="fechaEntradaField" template="layout/edit.xhtml">
<ui:define name="label">Fecha entrada</ui:define>
<rich:calendar id="fechaEntrada"
required="true"
value="#{nuevaReserva.fechaEntrada}" datePattern="MM/dd/yyyy" /> <!-- nuevaReserva is created and stored in Conversation Context when page is show -->
</s:decorate>
<s:decorate id="fechaSalidaField" template="layout/edit.xhtml">
<ui:define name="label">Fecha salida</ui:define>
<rich:calendar id="fechaSalida"
value="#{nuevaReserva.fechaSalida}" datePattern="MM/dd/yyyy" />
</s:decorate>
</rich:panel>
</h:form>
...
Booking.page.xml is:
<page view-id="/reservarPaso1.xhtml">
<param name="hotelSeleccionado" value="#{nuevaReserva.hotel}"/> <!-- Parameter goes to hotel attribute inside nuevaReserva instance -->
</page>
When I run the application this exception is thrown.
WARN [SeamPhaseListener] uncaught exception, passing to exception handler
javax.el.ELException: java.lang.IllegalArgumentException: argument type mismatch
I have tried using DataModel and DataModelSelection but hotelSeleccionado is not storing in conversation context when booking page is shown. I have tried too Contexts.getConversationContext.set("hotelSeleccionado",hotel) in an action method to store the object in context but the object doesn´t appear in seam debug page. Anybody can give me some help?
Sorry for long post. Thanks in advance.