Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I have a problem with <p:dataTable> in PrimeFaces, I can not find the error.

Class UsuarioAsig:

public class UsuarioAsig {

private BigDecimal codigopersona;
private String nombre;
private String paterno;
private String materno;
private String login;
private String observacion;
private String tipocontrol;
private String externo;
private String habilitado;
private String nombreperfil;
private BigDecimal codigousuario;  ...get and set...}

Class UsuarioAsigListaDataModel:

public class UsuarioAsigListaDataModel  extends ListDataModel<UsuarioAsig> implements SelectableDataModel<UsuarioAsig> {
public UsuarioAsigListaDataModel(){}
public UsuarioAsigListaDataModel(List<UsuarioAsig> data){super(data);}
@Override
public UsuarioAsig getRowData(String rowKey) {
    @SuppressWarnings("unchecked")
    List<UsuarioAsig> listaUsuarioAsigLectura = (List<UsuarioAsig>) getWrappedData();
    for (UsuarioAsig usuarioAsig : listaUsuarioAsigLectura) {
        if (usuarioAsig.getCodigopersona().equals(rowKey)) { return usuarioAsig; }
    }
    return null;
}
@Override
public Object getRowKey(UsuarioAsig usuarioAsig) {
    return usuarioAsig.getCodigopersona();
}}

Controller UsuarioAsigController:

@Controller("usuarioAsigController")
@Scope(value = "session")
public class UsuarioAsigController {

    private List<UsuarioAsig> listaUsuarioAsig;
    private HashMap<String, Object> selUsuarioAsig;
    private UsuarioAsigListaDataModel mediumUsuarioAsigModel;
    @Autowired
    UsuarioService usuarioService;

    ...

    public List<UsuarioAsig> getListaUsuarioAsig() {
        listaUsuarioAsig = usuarioService.selectAsig();
        return listaUsuarioAsig;
    }

    public void setListaUsuarioAsig(List<UsuarioAsig> listaUsuarioAsig) {
        this.listaUsuarioAsig = listaUsuarioAsig;
    }

    public void setMediumUsuarioAsigModel(UsuarioAsigListaDataModel mediumUsuarioAsigModel) {
        this.mediumUsuarioAsigModel = mediumUsuarioAsigModel;
    }

    public UsuarioAsigListaDataModel getMediumUsuarioAsigModel() {
        listaUsuarioAsig = usuarioService.selectAsig();
        mediumUsuarioAsigModel = new UsuarioAsigListaDataModel(listaUsuarioAsig);
        return mediumUsuarioAsigModel;
    }

    public void onRowSelect(SelectEvent event) {
        FacesMessage msg = new FacesMessage("Usuario seleccionado", ((UsuarioAsig) event.getObject()).getNombre());
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }
}

the error is generated when you click on one of the lines of datatable:

asiginst.xhtml:

<h:form id="form">
    <p:growl id="msgs" showDetail="true" />

    <p:dataTable id="usuarioAsigListaDataModel" var="usuarioAsig"
        value="#{usuarioAsigController.mediumUsuarioAsigModel}"
        rowKey="#{usuarioAsig.codigopersona}"
        selection="#{usuarioAsigController.selUsuarioAsig}"
        selectionMode="single" paginator="true" rows="10">
        <p:ajax event="rowSelect"
            listener="#{usuarioAsigController.onRowSelect}"
            update=":form:msgs" />
        <p:column headerText="Código" style="width:10%">#{usuarioAsig.codigopersona}</p:column>
        <p:column headerText="Nombre" style="width:32%">#{usuarioAsig.nombre}</p:column>
        <p:column headerText="Apellidos" style="width:32%">#{usuarioAsig.paterno} #{usuarioasig.materno}</p:column>
        <p:column headerText="Tipo Control" style="width:20%">#{usuarioAsig.tipocontrol}</p:column>
        <p:column headerText="Habilitado" style="width:6%">#{usuarioAsig.habilitado}</p:column>
    </p:dataTable>
</h:form>

THE ERROR IS GENERATED:

WARNING: asiginst.xhtml @51,103 listener="#{usuarioAsigController.onRowSelect}": java.lang.ClassCastException: java.util.HashMap cannot be cast to com.datos.entidades.qry.UsuarioAsig
javax.el.ELException: asiginst.xhtml @51,103 listener="#{usuarioAsigController.onRowSelect}": java.lang.ClassCastException: java.util.HashMap cannot be cast to com.datos.entidades.qry.UsuarioAsig
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:111)
    at org.primefaces.behavior.ajax.AjaxBehaviorListenerImpl.processArgListener(AjaxBehaviorListenerImpl.java:69)
    at org.primefaces.behavior.ajax.AjaxBehaviorListenerImpl.processAjaxBehavior(AjaxBehaviorListenerImpl.java:56)
    at org.primefaces.event.SelectEvent.processListener(SelectEvent.java:40)
    at javax.faces.component.behavior.BehaviorBase.broadcast(BehaviorBase.java:102)
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:760)
    at javax.faces.component.UIData.broadcast(UIData.java:1071)
    at javax.faces.component.UIData.broadcast(UIData.java:1093)
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
    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:409)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassCastException: java.util.HashMap cannot be cast to com.datos.entidades.qry.UsuarioAsig
    at com.controller.UsuarioAsigController.onRowSelect(UsuarioAsigController.java:217)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:264)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    ... 29 more
share|improve this question
add comment

2 Answers

up vote 0 down vote accepted

I'm assuming that the HashMap<String, Object> selUsuarioAsig is your selection.

Then in the method

public void onRowSelect(SelectEvent event) {
    FacesMessage msg = new FacesMessage("Usuario seleccionado", ((UsuarioAsig) event.getObject()).getNombre());
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

You are attempting to cast the HashMap to a UsuarioAsig: ((UsuarioAsig) event.getObject())

share|improve this answer
    
as examples of primefaces.org/showcase/ui/data/datatable/selection.xhtml not generate error in other tables, after much testing error was mybatis mapper, since the resulMap was in type Map. –  razegarra May 30 at 20:43
add comment

as examples of http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml, not generate error in other tables, after much testing error was mybatis mapper, since the resulMap was in type Map.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.