Boa tarde Pessoal,
Me deparei com uma necessidade de utilizar um selectonemenu com filtro e imagem, igual ao exemplo que hoje temos no primefaces: http://www.primefaces.org/showcase/ui/selectOneMenu.jsf
Porém, quando estou na questão do Converter eu nunca usei, ou seja, nao faço ideia de como consigo fazer funcionar ou qual tipo de objeto colocar. Gostaria muito da ajuda de voces para resolver esse caso.
Segue minha classe:
@ManagedBean
@SessionScoped
public class CadSetor {
public ArrayList<CamposListaSetorImagens> listaImagemSetor() {
ArrayList<CamposListaSetorImagens> listaItens = new ArrayList<CamposListaSetorImagens>();
try {
rs = Conexao.Consulta("select id, descricao, caminho_nome_imagem "
+ "from help_setor_imagens "
+ "order by 2 ");
} catch (SQLException ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Carregar Imagem Setor", ex.getMessage()));
return null;
}
try {
while (rs.next()) {
int id = rs.getInt("id");
String nome = rs.getString("descricao");
String caminho = rs.getString("caminho_nome_imagem");
CamposListaSetorImagens list = new CamposListaSetorImagens(id, nome, caminho);
listaItens.add(list);
}
} catch (SQLException ex) {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "Erro ao Carregar Imagem Setor - Next", ex.getMessage()));
return null;
}
return listaItens;
}
}
Classe que contem meus campos:
public class CamposListaSetorImagens {
private Integer id = 0;
private String descricao = "";
private String caminho_nome_imagem = "";
public CamposListaSetorImagens() {
}
public CamposListaSetorImagens(Integer id, String descricao, String caminho) {
this.id = id;
this.descricao = descricao;
this.caminho_nome_imagem = caminho;
}
public String getCaminho_nome_imagem() {
return caminho_nome_imagem;
}
public void setCaminho_nome_imagem(String caminho_nome_imagem) {
this.caminho_nome_imagem = caminho_nome_imagem;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
E meu xhtml
<div id="tela_ghu" align="center">
<p:layout id="ll_guposp" style="height: 500px; width: 770px">
<p:layoutUnit position="center" size="100" resizable="true" closable="true" collapsible="true" style="text-align: center">
<div id="formulario" align="left">
<h:form>
<p:panel id="pnl_ghu" header="Cadastro Setores" closable="false" toggleSpeed="500" closeSpeed="2000" widgetVar="panel" footer="codeHelpDesk - codeSW">
<p:messages id="messages_ghu" showDetail="true" autoUpdate="true"/>
<h:panelGrid columns="2" id="pn_ghu" >
<h:outputLabel id="ldesc" value="Descrição:"/>
<p:inputText id="desc" value="#{cadSetor.fields.descricao}" maxlength="50" size="51"/>
<h:outputLabel id="llgrupo" value="Responsável:"/>
<p:selectOneMenu id="sOMgrupo" value="#{cadSetor.fields.id_responsavel}" height="100" required="true">
<f:selectItem itemLabel="Selecionar um Responsável" itemValue="0" />
<f:selectItems id="fsGrupo" value="#{cadSetor.listaUsuarios()}"
var="item" itemLabel="#{item.descricao}"
itemValue="#{item.id}" />
</p:selectOneMenu>
<h:outputText value="Imagem Setor:" />
<p:selectOneMenu value="#{cadSetor.fields.idImagem}" converter="????::" panelStyle="width:150px"
effect="fade" var="p" style="width:160px" filter="true" filterMatchMode="startsWith">
<f:selectItem itemLabel="Selecione uma Imagem" itemValue="0" />
<f:selectItems value="#{cadSetor.listaImagemSetor()}" var="imagem" itemLabel="#{imagem.descricao}" itemValue="#{imagem.id}"/>
<p:column>
<p:graphicImage value="#{p.caminho_nome_imagem}" width="40" height="50"/>
</p:column>
<p:column>
#{p.descricao}
</p:column>
</p:selectOneMenu>
<p:commandButton value="Gravar" action="#{cadSetor.gravaRegistro()}"
icon="ui-icon-disk"
onclick="chamados;"/>
<p:commandButton value="Cancelar" action="#{cadSetor.atualizaTela()}"
icon="ui-icon-circle-close"
onclick="chamados;"/>
</h:panelGrid>
</p:panel>
<p:focus for="desc" />
</h:form>
</div>
</p:layoutUnit>
</p:layout>
</div>
Obrigado!!