【问题标题】:Caused by: java.lang.ClassCastException: java.lang.Long cannot be cast to原因:java.lang.ClassCastException:java.lang.Long 无法转换为
【发布时间】:2014-12-16 01:22:47
【问题描述】:

我仍在处理我的 h:selectOneMenu,我能够生成一个很好的值列表,但是转换器没有做正确的事情,我无法找出问题所在。
原因:java.lang.ClassCastException:java.lang.Long 无法转换为 com.ray.adtf.jpa.Gridmaster

感谢您的帮助!

xhtml:

<h:selectOneMenu id="mypick"
            converter="#{categoryConverterBean}"
            value="#{gridMaster_backing.pickedGrid}" 
            title="Test" >
            <f:selectItems value="#{gridMaster_backing.gridList}" var="prog"       itemValue="#{prog.gridid}" itemLabel="#{prog.gridid} - #{prog.program} - #{prog.project} - #{prog.ci}" />
        </h:selectOneMenu>

jpa:

import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.List;
/**
 * The persistent class for the GRIDMASTER database table.
 * 
 */
@Entity
@NamedQuery(name="Gridmaster.findAll", query="SELECT g FROM Gridmaster g")
public class Gridmaster implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private long gridid;

    private String ci;


    @Column(name="\"PROGRAM\"")
    private String program;

    private String project;

    public Gridmaster() {
    }

    public Long getGridid() {
        return this.gridid;
    }

    public void setGridid(Long gridid) {
        this.gridid = gridid;
    }

    public String getCi() {
        return this.ci;
    }

    public void setCi(String ci) {
        this.ci = ci;
    }


    public String getProgram() {
        return this.program;
    }

    public void setProgram(String program) {
        this.program = program;
    }

    public String getProject() {
        return this.project;
    }

    public void setProject(String project) {
        this.project = project;
    }

转换器:

import javax.faces.bean.ManagedBean;
import com.ray.adtf.jpa.Gridmaster;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
//You must annotate the converter as a managed bean, if you want to inject
//anything into it, like your persistence unit for example.
@ManagedBean(name = "categoryConverterBean") 
@FacesConverter(value = "categoryConverter")
public class CategoryConverter implements Converter {

 @PersistenceContext(unitName = "Test-Persistence")
 // I include this because you will need to 
 // lookup  your entities based on submitted values
 private transient EntityManager em;  

 @Override


    public Object getAsObject(FacesContext ctx, UIComponent component,
             String value) {
       // This will return the actual object representation
       // of your Category using the value (in your case 52) 
       // returned from the client side
       return em.find(Gridmaster.class, new Long(value)); 
     }

     @Override
     public String getAsString(FacesContext fc, UIComponent uic, Object o) {
         //This will return view-friendly output for the dropdown menu
         return ((Gridmaster) o).getGridid().toString();
     }
    }

支持 bean:

public Long pickedGrid; 

    public Long getPickedGrid() {
        return pickedGrid;
    }

    public void setPickedgrid(Long pickedGrid) {
        this.pickedGrid = pickedGrid;
    }


Stack Trace
javax.servlet.ServletException: java.lang.Long cannot be cast to com.ray.adtf.jpa.Gridmaster
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:56)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:177)
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:727)
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • 你能提供完整的堆栈跟踪吗?
  • 添加了完整的堆栈跟踪,但我不确定 Long 是问题,因为我尝试了 int 并遇到了同样的问题......在 eclipse 中我也显示了这个错误:在 com.ray.adtf.web .CategoryConverter.getAsString(CategoryConverter.java:33) [类:]

标签: java jsf jpa


【解决方案1】:

当您将Gridmaster 属性绑定到selectOneMenu 时,将其作为对象同样存储在支持bean 中:

public Gridmaster pickedGrid; 

public Gridmaster getPickedGrid() {
    return pickedGrid;
}

public void setPickedgrid(Gridmaster pickedGrid) {
    this.pickedGrid = pickedGrid;
}

因为您的转换器负责将 ID 转换为对象,因此您不必存储 ID。

【讨论】:

  • 我在网站上找到了一个帖子:Conversion Error setting value '52' for 'null Converter' 这很有帮助,解决了我的问题。谢谢!
【解决方案2】:

你能试试吗:long 输入int 输入

@Id
private int gridid;

public int getGridid() {
    return this.gridid;
}

public void setGridid(int gridid) {
    this.gridid = gridid;
}

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2016-05-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多