Boa tarde pessoal, estou desenvolvendo uma aplicação com primefaces 3.2, mais estou tendo problemas na hora de usar o filterBy em um p:dataTable. Ou seja, ao lista a eu consigo alterar e excluir normalmente, mais a parti do momento em que eu faço uma busca pelo filterBy e tento alterar, ele só me retorna o registro que esta na primeira linha do dataTable:
Segue o código:
listEscolas.xhtml
<?xml version="1.0" encoding="UTF-8"?> <p:growl id="growl" showDetail="true" life="300"/>
<p:dialog id="dlgescola" header="Alterar Escola" widgetVar="altEscola" width="450">
<h:form>
<h:panelGrid columns="3">
<h:outputLabel for="codigo_inep" value="Código Inep: *" />
<p:inputText id="codigo_inep" value="#{escolaController.escola.codigo_inep}" required="true" label="Código Inep">
<f:validateLength minimum="2" />
<p:ajax update="msgCodigo_inep" event="keyup" />
</p:inputText>
<p:message for="codigo_inep" id="msgCodigo_inep" display="icon"/>
<h:outputLabel for="nome" value="Nome: *" />
<p:inputText id="nome" value="#{escolaController.escola.nome}" required="true" label="Nome">
<f:validateLength minimum="2" />
<p:ajax update="msgNome" event="keyup" />
</p:inputText>
<p:message for="nome" id="msgNome" display="icon"/>
<h:outputLabel for="cnpj" value="CNPJ: *" />
<p:inputMask id="cnpj" value="#{escolaController.escola.cnpj}" mask="99.999.999/9999-99" required="true" label="CNPJ">
<f:validateLength minimum="2" />
<p:ajax update="msgCnpj" event="keyup" />
</p:inputMask>
<p:message for="cnpj" id="msgCnpj" display="icon"/>
<h:outputLabel for="telefone" value="Telefone: *" />
<p:inputMask id="telefone" value="#{escolaController.escola.telefone}" mask="(99)9999-9999" required="true" label="Telefone">
<f:validateLength minimum="2" />
<p:ajax update="msgTelefone" event="keyup" />
</p:inputMask>
<p:message for="telefone" id="msgTelefone" display="icon"/>
<h:outputLabel for="rua" value="Rua: *" />
<p:inputText id="rua" value="#{escolaController.escola.rua}" required="true" label="Rua">
<f:validateLength minimum="2" />
<p:ajax update="msgRua" event="keyup" />
</p:inputText>
<p:message for="rua" id="msgRua" display="icon"/>
<h:outputLabel for="numero" value="Número: " />
<p:inputText id="numero" value="#{escolaController.escola.numero}" label="Número">
<f:validateLength minimum="0" />
</p:inputText>
<p:message for="numero" display="icon"/>
<h:outputLabel for="bairro" value="Bairro: *" />
<p:inputText id="bairro" value="#{escolaController.escola.bairro}" required="true" label="Bairro">
<f:validateLength minimum="2" />
<p:ajax update="msgBairro" event="keyup" />
</p:inputText>
<p:message for="bairro" id="msgBairro" display="icon"/>
<h:outputLabel for="cep" value="CEP: *" />
<p:inputMask id="cep" value="#{escolaController.escola.cep}" mask="99.999-999" required="true" label="CEP">
<f:validateLength minimum="2" />
<p:ajax update="msgCep" event="keyup" />
</p:inputMask>
<p:message for="cep" id="msgCep" display="icon"/>
<h:outputLabel for="complemento" value="Complemento: " />
<p:inputText id="complemento" value="#{escolaController.escola.complemento}" label="Complemento">
<f:validateLength minimum="0" />
</p:inputText>
<p:message for="complemento" display="icon"/>
<h:outputLabel for="cidade" value="Cidade: *" />
<p:inputText id="cidade" value="#{escolaController.escola.cidade}" required="true" label="Cidade">
<f:validateLength minimum="2" />
<p:ajax update="msgCidade" event="keyup" />
</p:inputText>
<p:message for="cidade" id="msgCidade" display="icon"/>
<h:outputLabel for="user" value="Usuário: *" />
<p:selectOneMenu id="user" value="#{escolaController.escola.usuario.id}" required="true" label="Usuário">
<f:selectItems value="#{escolaController.usuarios}"/>
<f:validateLength minimum="1" />
<p:ajax update="msgUser" event="keyup" />
</p:selectOneMenu>
<p:message for="user" id="msgUser" display="icon"/>
</h:panelGrid>
<p:commandButton id="btAlterar" value="Alterar" update=":growl" actionListener="#{escolaController.alterar}" oncomplete="handleLoginRequest(xhr, status, args)" ajax="false" immediate="false" />
</h:form>
</p:dialog>
<!--Data Table Escolas -->
<h:form id="form">
<h:outputLabel for="escola" value="Escola" />
<p:inputText size="50" id="nome" value="#{escolaController.escola.nome}" />
<p:commandButton value="Buscar" action="#{escolaController.produtosCat}" update="dataTable" />
<p:dataTable id="dataTable" var="escola" value="#{escolaController.todasEscolas}"
paginator="true" rows="10"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15">
<f:facet name="header">
Escolas Cadastrados
</f:facet>
<p:column>
<f:facet name="header">
<h:outputText value="Código" />
</f:facet>
<h:outputText value="#{escola.id}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Código Inep" />
</f:facet>
<h:outputText value="#{escola.codigo_inep}" />
</p:column>
<p:column filterStyle="max-width: 40px; min-width: 300px;" filterBy="#{escola.nome}">
<f:facet name="header">
<h:outputText value="Escola" />
</f:facet>
<h:outputText value="#{escola.nome}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Usuário" />
</f:facet>
<h:outputText value="#{escola.usuario.username}" />
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Alterar" />
</f:facet>
<div align="center">
<p:commandButton update=":dlgescola" action="#{escolaController.editar}" oncomplete="altEscola.show()" image="ui-icon ui-icon-pencil" title="Alterar Escola">
<f:setPropertyActionListener target="#{escolaController.escola}" value="#{escola}" />
</p:commandButton>
</div>
</p:column>
<p:column>
<f:facet name="header">
<h:outputText value="Excluir" />
</f:facet>
<div align="center">
<p:commandButton oncomplete="confirmation.show()" image="ui-icon ui-icon-close" title="Excluir">
<f:setPropertyActionListener value="#{escola}" target="#{escolaController.escolaParaEditarExcluir}" />
</p:commandButton>
</div>
</p:column>
</p:dataTable>
</h:form>
<h:form>
<!-- Caixa de dialogo para exclusão-->
<p:confirmDialog message="Deseja realmente excluir esta Escola?" width="350" header="Confirmação" severity="alert" widgetVar="confirmation">
<p:commandButton value="Sim" update=":form:dataTable" actionListener="#{escolaController.excluir}" oncomplete="confirmation.hide()"/>
<p:commandButton value="Não" onclick="confirmation.hide()" type="button" />
</p:confirmDialog>
</h:form>
</ui:define>
</ui:composition>
</h:body>
EscolaController
public class EscolaController {
private Escola escola = new Escola();
private DataModel model;
private Map<String, Object> usuarioList = null;
@Resource
private DaoGenerico<Escola, Integer> escolaDao;
@Resource
private DaoGenerico<Usuario, Integer> usuarioDao;
public EscolaController() {
this.escola = new Escola();
this.escola.setUsuario(new Usuario());
}
public Escola getEscola() {
return escola;
}
public void setEscola(Escola escola) {
this.escola = escola;
}
public DaoGenerico<Escola, Integer> getEscolaDao() {
return escolaDao;
}
public void setEscolaDao(DaoGenerico<Escola, Integer> escolaDao) {
this.escolaDao = escolaDao;
}
public DaoGenerico<Usuario, Integer> getUsuarioDao() {
return usuarioDao;
}
public void setUsuarioDao(DaoGenerico<Usuario, Integer> usuarioDao) {
this.usuarioDao = usuarioDao;
}
// preenche o combo com usuarios disponiveis
// no formulário de cadastro de Escola
public Map<String, Object> getUsuarios() {
usuarioList = new LinkedHashMap<String, Object>();
for (Iterator<?> iter = usuarioDao.todos().iterator(); iter.hasNext();) {
Usuario u = (Usuario) iter.next();
usuarioList.put(u.getUsername(), u.getId());// label,value
}
return usuarioList;
}
/**
* Método chamado dentro do salvar para que seja possivel limpar a caixa de
* dialog
*/
protected void novo() {
escola = new Escola();
this.escola.setUsuario(new Usuario());
}
public String cancelar() {
novo();
return "home.xhtml";
}
/**
* Método que mostra todas as escolas
*
* @return -> DataTable de Escolas
*/
public DataModel getTodasEscolas() {
return model = new ListDataModel(escolaDao.todos());
}
/**
* Método resposavel por pegar a escola selecionada na tabela
*
* @return -> Escola para ser editada ou excluida
*/
public Escola getEscolaParaEditarExcluir() {
escola = (Escola) model.getRowData();
return escola;
}
/**
* Método resposável por salvar
*
* @return -> uma nova escola
*/
public String salvar() {
escolaDao.salvar(escola);
FacesUtils.mensInfo("Escola " + escola.getNome() + " cadastrada com sucesso ");
novo();
return "formEscola.xhtml";
}
/**
* Método resposável por alterar um usuário
*/
public void alterar(ActionEvent event) {
RequestContext context = RequestContext.getCurrentInstance();
boolean loggedIn = false;
if (escola.getId() != null) {
Usuario user = usuarioDao.pesquisarPorId(escola.getUsuario().getId());
escola.setUsuario(user);
escolaDao.atualizar(escola);
loggedIn = true;
FacesUtils.mensInfo("Escola " + escola.getNome() + " alterada com sucesso ");
} else {
loggedIn = false;
}
context.addCallbackParam("loggedIn", loggedIn);
}
public Escola editar() {
setEscola(getEscolaParaEditarExcluir());
return escola;
}
/**
* Método resposável por excluir uma escola
*/
public String excluir() {
escola = getEscolaParaEditarExcluir();
escolaDao.excluir(escola);
FacesUtils.mensInfo("Escola excluida com sucesso");
return "home.xhtml";
}
}
e por fim o método dentro da Dao
@SuppressWarnings(“unchecked”)
public List todos() {
String queryS = “SELECT obj FROM " + oClass.getSimpleName() + " obj”;
Query query = getEntityManager().createQuery(queryS);
return query.getResultList();
}
Já tentei de tudo mais não estou conseguindo.
Bom noite pessoal, consegui revolver.