【问题标题】:java.lang.ClassCastException: java.util.HashMap cannot be cast to ClassObjectjava.lang.ClassCastException:java.util.HashMap 无法转换为 ClassObject
【发布时间】:2014-05-29 21:45:52
【问题描述】:

我在 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

【问题讨论】:

    标签: spring jsf primefaces


    【解决方案1】:

    我假设HashMap&lt;String, Object&gt; 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())

    【讨论】:

    【解决方案2】:

    http://www.primefaces.org/showcase/ui/data/datatable/selection.xhtml为例,在其他表中不产生错误,经过多次测试错误是mybatis mapper,因为resulMap是Map类型。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多