繁体   English   中英

java.lang.ClassCastException:无法将java.util.HashMap强制转换为ClassObject

[英]java.lang.ClassCastException: java.util.HashMap cannot be cast to ClassObject

我在PrimeFaces中遇到<p:dataTable>的问题,我找不到错误。

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...}

类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();
}}

控制器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);
    }
}

单击数据表的其中一行时,将生成错误:

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>

产生错误:

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

我假设HashMap<String, Object> selUsuarioAsig是您的选择。

然后在方法

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

您正在尝试将HashMap投射到UsuarioAsig: ((UsuarioAsig) event.getObject())

作为http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml的示例,在经过多次测试错误的是mybatis mapper之后,其他表中没有错误,因为resulMap的类型为Map。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM