Pessoal, já pesquisei um monte de exemplos do GUJ, mudei a forma de fazer, e até agora não consegui resultados. De toda forma que tento fazer, ele sempre dá a mesma mensagem. Até substitui o bean de valor por um string simples pra ver se resolvia, mas não deu certo.
Código JSF
<rich:listShuttle var="item"
sourceValue="#{grupoUsuario.acessos}"
targetValue="#{grupoUsuario.acessosGrupo}"
fastOrderControlsVisible="false"
orderControlsVisible="false"
converter="AcessoConverter"
id="acessoGrupo"
>
<rich:column>
<h:outputText value="#{item}" id="desc_acesso"/>
</rich:column>
</rich:listShuttle>
Meu bean
@Entity
@Table(name = "ACESSO")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Acesso.findAll", query = "SELECT a FROM Acesso a"),
@NamedQuery(name = "Acesso.findByNrAcesso", query = "SELECT a FROM Acesso a WHERE a.nrAcesso = :nrAcesso"),
@NamedQuery(name = "Acesso.findByDsAcesso", query = "SELECT a FROM Acesso a WHERE a.dsAcesso = :dsAcesso")})
public class Acesso implements Serializable, IPojo {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "NR_ACESSO")
private Integer nrAcesso;
@Basic(optional = false)
@Column(name = "DS_ACESSO")
private String dsAcesso;
public Acesso() {
}
public Acesso(Integer nrAcesso) {
this.nrAcesso = nrAcesso;
}
public Acesso(Integer nrAcesso, String dsAcesso) {
this.nrAcesso = nrAcesso;
this.dsAcesso = dsAcesso;
}
public Integer getNrAcesso() {
return nrAcesso;
}
public void setNrAcesso(Integer nrAcesso) {
this.nrAcesso = nrAcesso;
}
public String getDsAcesso() {
return dsAcesso;
}
public void setDsAcesso(String dsAcesso) {
this.dsAcesso = dsAcesso;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((nrAcesso==null) ? 0 : nrAcesso.hashCode());
result = prime * result + ((dsAcesso==null) ? 0 : dsAcesso.hashCode());
return result;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Acesso)) {
return false;
}
Acesso other = (Acesso) object;
if ( (this.nrAcesso == null && other.nrAcesso != null) ||
(this.nrAcesso != null && !this.nrAcesso.equals(other.nrAcesso))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.viena.bean.Acesso[ nrAcesso=" + nrAcesso + " ]";
}
}
O trecho relevante do managed bean
package br.com.viena.jsf.beans;
public class GrupoUsuarioBean {
private Integer nrGrupo;
private String dsGrupo;
private Date dtCadastro;
private Integer nrUsuarioCad;
private Date dtAlteracao;
private Integer nrUsuarioAlter;
private String nomeUsuario;
private ArrayList<GrupoUsuario> gruposUsuario;
private ArrayList<String> acessos;
private ArrayList<String> acessosGrupo;
public ArrayList<String> getAcessos() {
AcessoBO regra = new AcessoBO();
try {
//acessos = regra.listarNaoAcessoGrupo(nrGrupo);
acessos = new ArrayList<String>();
if (nrGrupo == null) {
return null;
} else {
for (Acesso item : regra.listarNaoAcessoGrupo(nrGrupo)) {
acessos.add(item.getDsAcesso());
}
return acessos;
}
} catch (Exception ex) {
Logger.getLogger(GrupoUsuarioBean.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public ArrayList<String> getAcessosGrupo() {
AcessoBO regra = new AcessoBO();
acessosGrupo = new ArrayList<String>();
try {
if (nrGrupo == null) {
return null;
} else {
for (Acesso acesso : regra.listarAcessoGrupo(nrGrupo)) {
acessosGrupo.add(acesso.getDsAcesso());
}
return acessosGrupo;
}
} catch (Exception ex) {
Logger.getLogger(GrupoUsuarioBean.class.getName()).log(Level.SEVERE, null, ex);
return null;
}
}
public void setAcessosGrupo(ArrayList<String> acessosGrupo) {
this.acessosGrupo = acessosGrupo;
}
}
Como estou trabalhando só com string agora, retirei o converter, mas mesmo colocando ele e declarando no faces-config, não funcionava, embora entrasse e executasse o converter corretamente.
Não queria implementar isso na mão, não pode ser tão difícil assim de descobrir