Java 选择器转换器
我的选择列表有问题,我想这是因为我没有转换器,当我试图查看我选择的项目时,单击commandbutton,我得到以下异常:Java 选择器转换器,java,jsf,primefaces,Java,Jsf,Primefaces,我的选择列表有问题,我想这是因为我没有转换器,当我试图查看我选择的项目时,单击commandbutton,我得到以下异常: java.lang.ClassCastException: java.lang.String cannot be cast to model.Employee 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DT
java.lang.ClassCastException: java.lang.String cannot be cast to model.Employee
代码如下:
<!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>
豆子
转换器
@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;
}
}
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;
}
雇员=职能
@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 + " ]";
}
}
对于自动完成或选取列表,请使用此通用转换器
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中的转换器
更新:
改变
<p:pickList value="#{pickListBean.employeeList}"
var="employee" itemLabel="#{employee.employeeName}"
converter="pickListConverter"
itemValue="#{employee.employeeCode}" />
到
我将itemValue更改为{employee}
试试上面的方法,看看是否有效。对于自动完成或选择列表,请使用此通用转换器
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中的转换器
更新:
改变
<p:pickList value="#{pickListBean.employeeList}"
var="employee" itemLabel="#{employee.employeeName}"
converter="pickListConverter"
itemValue="#{employee.employeeCode}" />
到
我将itemValue更改为{employee}
试试上面的方法,看看是否有效。您需要将转换器添加到选择列表中。请看我的答案。也发布您的员工类。始终尽可能多地发布代码更新Makky,我用葡萄牙语编写代码,所以Funcionario=Employee。您需要将转换器添加到您的选择列表中。请看我的答案。也发布您的员工类。总是尽可能多地发布codeUpdate Makky,我用葡萄牙语编写代码,所以Funcionario=Employee。