p:DataTable and selection when no selection (composite)

UI Components for JSF
Post Reply
gfz87
Posts: 10
Joined: 16 Jun 2010, 21:27

16 Jun 2010, 21:53

Hi everybody, this is my first post. I was struggling for a quite time with a problem. It happens when I have an object referenced to the selection attribute of p:DataTable, the user selects nothing, then it gives the following exception:

Code: Select all

java.lang.IllegalArgumentException: Cannot convert null of type class java.lang.String to class entidades.Proveedor
	at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:397)
	at com.sun.el.parser.AstValue.setValue(AstValue.java:194)
	at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:286)
	at org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:88)
	at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:124)
	at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.put(CompositeComponentAttributesELResolver.java:361)
	at com.sun.faces.el.CompositeComponentAttributesELResolver$ExpressionEvalMap.put(CompositeComponentAttributesELResolver.java:283)
	at javax.el.MapELResolver.setValue(MapELResolver.java:262)
	at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:386)
	at com.sun.faces.el.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:100)
	at com.sun.el.parser.AstValue.setValue(AstValue.java:197)
	at com.sun.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:286)
	at org.jboss.weld.el.WeldValueExpression.setValue(WeldValueExpression.java:88)
	at com.sun.faces.facelets.el.ContextualCompositeValueExpression.setValue(ContextualCompositeValueExpression.java:163)
	at com.sun.faces.facelets.el.TagValueExpression.setValue(TagValueExpression.java:124)
	at org.primefaces.component.datatable.DataTable.processUpdates(DataTable.java:382)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
	at javax.faces.component.UIForm.processUpdates(UIForm.java:270)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
	at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1108)
	at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:1239)
	at com.sun.faces.lifecycle.UpdateModelValuesPhase.execute(UpdateModelValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
	at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
	at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
	at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
	at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
	at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
	at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
	at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
	at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
	at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
	at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
	at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
	at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
	at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
	at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
	at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
	at java.lang.Thread.run(Thread.java:619)
This only happens when I embed a p:DataTable inside a composite control:

Code: Select all

    <composite:interface>
        <composite:attribute name="vista" required="true" />
        <composite:attribute name="objetoSeleccion" required="false" default="null" type="entidades.Proveedor"/>
    </composite:interface>

    <composite:implementation>
            <p:dataTable var="fila" value="#{cc.attrs.vista.devolverProveedores()}" selection="#{cc.attrs.objetoSeleccion}" paginator="true" rows="10" selectionMode="single">
                <p:column sortBy="#{fila.nombre}" filterBy="#{fila.nombre}" resizable="true">
                    <f:facet name="header">
                        <h:outputText value="Nombre" />
                    </f:facet>
                    <h:outputText value="#{fila.nombre}" />
                </p:column>
            </p:dataTable>
    </composite:implementation>
and call it with:

Code: Select all

<h:form prependId="false">
    <componentes:listadoProveedores vista="#{VistaRegistrarOrdenDeCompra}" objetoSeleccion="#{VistaRegistrarOrdenDeCompra.proveedorSeleccionado}"/>
    <p:commandButton ajax="false" styleClass="botonesBottom" value="Siguiente" action="#{VistaRegistrarOrdenDeCompra.seleccionarProveedorSiguiente}"/>
</h:form>

Code: Select all

@ManagedBean(name="VistaRegistrarOrdenDeCompra")
@RequestScoped
public class VistaRegistrarOrdenDeCompra {
    @EJB
    private GestorRegistrarOrdenDeCompra gestorRegistrarOrdenDeCompra;
    private Proveedor proveedorSeleccionado = null;
    private String error;

    public String getError() {
        if (error == null) error = "";
        return error;
    }

    public Proveedor getProveedorSeleccionado() {
        return proveedorSeleccionado;
    }

    public void setProveedorSeleccionado(Proveedor proveedorSeleccionado) {
        this.proveedorSeleccionado = proveedorSeleccionado;
    }

    public Collection<Proveedor> devolverProveedores() {
        return gestorRegistrarOrdenDeCompra.devolverProveedores();
    }

    public String seleccionarProveedorSiguiente() {
        if (proveedorSeleccionado != null) {
            this.error = "";
            return "mostrarDatosProveedor";
        } else {
            this.error = "Por favor, seleccione un Proveedor.";
            return null;
        }
    }
}
Is there any solution to this?

Greetings

Gian Franco Zabarino

gfz87
Posts: 10
Joined: 16 Jun 2010, 21:27

23 Jun 2010, 12:23

Hi again, I deleted the default="null" sentence from <composite:attribute ... />, and now it works. The issue can be closed now. Any ideas why this caused the problem?

Gian Franco Zabarino

gfz87
Posts: 10
Joined: 16 Jun 2010, 21:27

23 Jun 2010, 12:30

Well trying a little more, I changed default="null" with default="#{null}" and it also works. I guess that was the problem. Still if I was passing the value, it shouldn't have read the default "null" value.. Right?

Gian Franco Zabarino

cagatay.civici
Prime
Posts: 18616
Joined: 05 Jan 2009, 00:21
Location: Cybertron
Contact:

24 Jun 2010, 20:09

Yes, null will be interpreted as a string, it should be #{null}

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 49 guests