首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Picklist转换器

Picklist转换器
EN

Stack Overflow用户
提问于 2014-04-05 22:32:44
回答 1查看 2.6K关注 0票数 2

我的选择列表有问题,因为我没有转换器,当我试图查看我在命令按钮中选择的项目时,我会得到以下例外:

代码语言:javascript
复制
java.lang.ClassCastException: java.lang.String cannot be cast to model.Employee

这是密码:

代码语言:javascript
复制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>PickList Test</title>
</h:head>
<h:body>
    <h:form id="form">
             <p:pickList value="#{pickListBean.employeeList}" var="employee" itemLabel="#  {employee.employeeName}" converter="pickListConverter" itemValue="#{employee.employeeCode}" />  
             <p:commandButton value="View targets" action="#{pickListBean.viewTargets}" style="margin-    left: 12px;"/>
    </h:form>


 </h:body>
 </html>

豆子

代码语言:javascript
复制
@ManagedBean
@RequestScoped
public class PickListBean {
@EJB
private BussinessList bl = new BussinessList();
private DualListModel<Employee> employeeList;
List<Employee> source = new ArrayList<Employee>();
List<Employee> target = new ArrayList<Employee>();
private Employee employee;
/**
* Creates a new instance of PickListBean
*/
public PickListBean() {


}
@PostConstruct
public void postConstruct(){
source = bl.getEmployeeList();
employeeList = new DualListModel<Employee>(source, target);
}
public void viewTargets(){
    target = employeeList.getTarget();
    for(int i = 0; i < target.size(); i++)
        System.out.println("Targets: " + target.get(i).getEmployeeName());
}
public DualListModel<Employee> getEmployeeList() {
return employeeList;
}

public void setEmployeeList(DualListModel<Employee> employeeList) {
this.employeeList = employeeList;
}
 public Employee getEmployee() {
 return employee;
 }

 public void setEmployee(Employee employee) {
this.employee= employee;
}
}

转换器

代码语言:javascript
复制
@FacesConverter(value = "pickListConverter")
public class PickListConverter implements Converter {
private static Map<Object, String> entities = new WeakHashMap<Object, String>();

@Override
public String getAsString(FacesContext context, UIComponent component, Object entity) {
    synchronized (entities) {
        if (!entities.containsKey(entity)) {
            String uuid = UUID.randomUUID().toString();
            entities.put(entity, uuid);
            return uuid;
        } else {
            return entities.get(entity);
        }
    }
}

@Override
public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
    for (Entry<Object, String> entry : entities.entrySet()) {
        if (entry.getValue().equals(uuid)) {
            return entry.getKey();
        }
    }
    return null;
}

}

雇员= Funcionario

代码语言:javascript
复制
  @Entity
  @Table(name = "funcionario")
 @XmlRootElement
 @NamedQueries({
@NamedQuery(name = "Funcionario.findAll", query = "SELECT f FROM Funcionario f"),
@NamedQuery(name = "Funcionario.findByCodigoFuncionario", query = "SELECT f FROM   Funcionario f WHERE f.codigoFuncionario = :codigoFuncionario"),
@NamedQuery(name = "Funcionario.findByNomeFuncionario", query = "SELECT f FROM Funcionario f WHERE f.nomeFuncionario = :nomeFuncionario"),
@NamedQuery(name = "Funcionario.findByUsernameFuncionario", query = "SELECT f FROM    Funcionario f WHERE f.usernameFuncionario = :usernameFuncionario"),
@NamedQuery(name = "Funcionario.findBySenhaFuncionario", query = "SELECT f FROM    Funcionario f WHERE f.senhaFuncionario = :senhaFuncionario")})
public class Funcionario implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "codigo_funcionario")
private Integer codigoFuncionario;
@Size(max = 45)
@Column(name = "nome_funcionario")
private String nomeFuncionario;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 300)
@Column(name = "username_funcionario")
private String usernameFuncionario;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 300)
@Column(name = "senha_funcionario")
private String senhaFuncionario;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "codigoFuncionario")
private Collection<EquipaResponsavel> equipaResponsavelCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "funcionario")
private Collection<EquipaFuncionario> equipaFuncionarioCollection;
@OneToMany(mappedBy = "codigoFuncionario")
private Collection<Ticket> ticketCollection;

public Funcionario() {
}

public Funcionario(Integer codigoFuncionario) {
    this.codigoFuncionario = codigoFuncionario;
}

public Funcionario(Integer codigoFuncionario, String usernameFuncionario, String senhaFuncionario) {
    this.codigoFuncionario = codigoFuncionario;
    this.usernameFuncionario = usernameFuncionario;
    this.senhaFuncionario = senhaFuncionario;
}

public Integer getCodigoFuncionario() {
    return codigoFuncionario;
}

public void setCodigoFuncionario(Integer codigoFuncionario) {
    this.codigoFuncionario = codigoFuncionario;
}

public String getNomeFuncionario() {
    return nomeFuncionario;
}

public void setNomeFuncionario(String nomeFuncionario) {
    this.nomeFuncionario = nomeFuncionario;
}

public String getUsernameFuncionario() {
    return usernameFuncionario;
}

public void setUsernameFuncionario(String usernameFuncionario) {
    this.usernameFuncionario = usernameFuncionario;
}

public String getSenhaFuncionario() {
    return senhaFuncionario;
}

public void setSenhaFuncionario(String senhaFuncionario) {
    this.senhaFuncionario = senhaFuncionario;
}

@XmlTransient
public Collection<EquipaResponsavel> getEquipaResponsavelCollection() {
    return equipaResponsavelCollection;
}

public void setEquipaResponsavelCollection(Collection<EquipaResponsavel> equipaResponsavelCollection) {
    this.equipaResponsavelCollection = equipaResponsavelCollection;
}

@XmlTransient
public Collection<EquipaFuncionario> getEquipaFuncionarioCollection() {
    return equipaFuncionarioCollection;
}

public void setEquipaFuncionarioCollection(Collection<EquipaFuncionario> equipaFuncionarioCollection) {
    this.equipaFuncionarioCollection = equipaFuncionarioCollection;
}

@XmlTransient
public Collection<Ticket> getTicketCollection() {
    return ticketCollection;
}

public void setTicketCollection(Collection<Ticket> ticketCollection) {
    this.ticketCollection = ticketCollection;
}

@Override
public int hashCode() {
    int hash = 0;
    hash += (codigoFuncionario != null ? codigoFuncionario.hashCode() : 0);
    return hash;
}

@Override
public boolean equals(Object object) {
    // TODO: Warning - this method won't work in the case the id fields are not set
    if (!(object instanceof Funcionario)) {
        return false;
    }
    Funcionario other = (Funcionario) object;
    if ((this.codigoFuncionario == null && other.codigoFuncionario != null) || (this.codigoFuncionario != null && !this.codigoFuncionario.equals(other.codigoFuncionario))) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "modelo.Funcionario[ codigoFuncionario=" + codigoFuncionario + " ]";
}

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-06 08:17:19

对于自动完成选择列表,请使用此通用转换器

代码语言:javascript
复制
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
import java.util.WeakHashMap;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

@FacesConverter(value = "entityConverter")
public class EntityConverter implements Converter {

    private static Map<Object, String> entities = new WeakHashMap<Object, String>();

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object entity) {
        synchronized (entities) {
            if (!entities.containsKey(entity)) {
                String uuid = UUID.randomUUID().toString();
                entities.put(entity, uuid);
                return uuid;
            } else {
                return entities.get(entity);
            }
        }
    }

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String uuid) {
        for (Entry<Object, String> entry : entities.entrySet()) {
            if (entry.getValue().equals(uuid)) {
                return entry.getKey();
            }
        }
        return null;
    }

}

对于其他选择列表项,请使用来自Omnifaces 这里。的转换器

更新:

变化

代码语言:javascript
复制
     <p:pickList value="#{pickListBean.employeeList}" 
     var="employee" itemLabel="#{employee.employeeName}"
     converter="pickListConverter" 
     itemValue="#{employee.employeeCode}" />  

代码语言:javascript
复制
 <p:pickList value="#{pickListBean.employeeList}" 
 var="employee" itemLabel="#{employee.employeeName}"
 converter="pickListConverter" 
 itemValue="#{employee}" />  

我将itemValue改为#{employee}

在上面试一试,看看是否有效。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22887710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档