Boa tarde a todos …
estou desenvolvendo uma pequena aplicação com jsf2 ,usando os componentes do primefaces porém enfrento alguns problemas…
tenho uma pagina com um formulario e outra pagina com uma lista,eu insiro um funcionario no forumario,vou na lista ele está lá,beleza,porém,
quando eu clico pra editar ele,ele popula no meu ManagedBean o funcionario e leva para o formulario,populando todos os inputs,beleza,porém,quando eu tento
atualizar o funcionario,não acontece nada,ele não executa o actionListner e modo algum.
então tentei colocar a lista e o formulario na mesma pagina e tratar os eventos com ajax,atualmente a pagina está assim
[code]<p:fieldset legend=“Adicionar funcionarios” >
<h:form>
<p:messages id=“messages” showDetail=“true” autoUpdate=“true” closable=“true” />
<h:inputText value="#{funcionarioBean.funcionario.id}" />
<h:panelGrid columns=“4” columnClasses=“label, value” styleClass=“panelGridCenter”>
<h:outputText value="Nome : *" />
<p:inputText required="true" label="nome" requiredMessage="é necessario digitar o nome"
value="#{funcionarioBean.funcionario.nome}" />
<h:outputText value="CPF: *" />
<p:inputMask mask="999.999.999-99" requiredMessage="é necessario digitar o cpf" converter="convertInput" required="true" label="cpf"
value="#{funcionarioBean.funcionario.cpf}" />
<h:outputText value="Endereço" />
<p:inputText value="#{funcionarioBean.funcionario.endereco}" requiredMessage="é necessario digitar o endereço"
required="true" label="endereco" />
<h:outputText value="CEP :* " />
<p:inputMask mask="99.999-999" converter="convertInput"
value="#{funcionarioBean.funcionario.cep}" requiredMessage="é necessario digitar o cep" required="true" />
<h:outputText value="Bairro :* " />
<p:inputText value="#{funcionarioBean.funcionario.bairro}" required="true" requiredMessage="é necessario digitar o bairro" />
<h:outputText value="Cidade : *" />
<p:selectOneMenu required="true" requiredMessage="é necessario escolher uma cidade" value="#{funcionarioBean.funcionario.cidade}">
<f:selectItem itemLabel="Rio de janeiro" itemValue="Rio de janeiro" />
<f:selectItem itemLabel="Nilopolis" itemValue="Nilopolis" />
<f:selectItem itemLabel="Caxias" itemValue="Caxias" />
<f:selectItem itemLabel="Pavuna" itemValue="Pavuna" />
</p:selectOneMenu>
<h:outputText value="Estado : *" />
<p:selectOneMenu required="true" requiredMessage="é necessario escolher um estado" value="#{funcionarioBean.funcionario.estado}" >
<f:selectItem itemLabel="RJ" itemValue="RJ" />
<f:selectItem itemLabel="SP" itemValue="SP" />
<f:selectItem itemLabel="MG" itemValue="MG" />
</p:selectOneMenu>
<h:outputText value="Email : *" />
<p:inputText required="true" label="Email"
value="#{funcionarioBean.funcionario.email}" requiredMessage="é necessario digitar um email" validatorMessage="email invalido" >
<f:validateRegex
pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" />
</p:inputText>
<h:outputText value="Telefone :* " />
<p:inputMask mask="(99)9999-9999" converter="convertInput" required="true" requiredMessage="é necessario digitar um telefone" value="#{funcionarioBean.funcionario.telefone}"/>
<h:outputText value="Perfil : *" />
<p:selectOneMenu required="true" requiredMessage="é necessario escolher um perfil" value="#{funcionarioBean.funcionario.perfil}">
<f:selectItem itemLabel="Administrador" itemValue="Administrador" />
<f:selectItem itemLabel="Funcionario" itemValue="Funcionario" />
</p:selectOneMenu>
<h:outputText value="Login :* " />
<p:inputText required="true" requiredMessage="é necessario digitar um login" value="#{funcionarioBean.funcionario.login}"/>
<h:outputText value="Senha :*" />
<p:password value="#{funcionarioBean.funcionario.senha}" required="true" requiredMessage="é necessario escolher uma senha" />
<p:commandButton value="Submit" update="@all" process="@form" actionListener="#{funcionarioBean.adicionaAltera}" >
</p:commandButton> [/code]
quando eu clico no submit ele salvar o funcionario
[code]public void adicionaAltera(ActionEvent actionEvent){
EntityManager manager = this.getManager();
FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
System.out.println(funcionario.getId());
System.out.println(funcionario.getId());
if(this.funcionario.getId() == 0 ){
repository.adiciona(funcionario);
System.out.println("Adicionou");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso", "funcionario inserido com sucesso!"));
funcionario = null;
}else{
repository.atualiza(funcionario);
System.out.println("Alterou");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso", "funcionario alterado com sucesso!"));
funcionario = null;
}
}[/code]
ele recarrega o seguinte dataTable
[code]<p:fieldset legend=“Listar funcionarios” >
<h:form>
<p:dataTable var="funcionarios" value="#{funcionarioBean.funcionarios}" paginator="true" rows="8"
selection="#{funcionarioBean.funcionarioRemover}" rowKey="#{funcionarios.id}" emptyMessage="Sem funcionarios" >
<f:facet name="header">
Lista de todos os usuarios
</f:facet>
<p:column selectionMode="multiple">
</p:column>
<p:column headerText="id" >
#{funcionarios.id}
</p:column>
<p:column headerText="Nome">
#{funcionarios.nome}
</p:column>
<p:column headerText="CPF">
#{funcionarios.cpf}
</p:column>
<p:column headerText="Endereço">
#{funcionarios.endereco}
</p:column>
<p:column headerText="Cidade">
#{funcionarios.cidade}
</p:column>
<p:column headerText="Estado">
#{funcionarios.estado}
</p:column>
<p:column headerText="Bairro">
#{funcionarios.bairro}
</p:column>
<p:column headerText="Telefone">
#{funcionarios.telefone}
</p:column>
<p:column headerText="cep">
#{funcionarios.cep}
</p:column>
<p:column headerText="Email">
#{funcionarios.email}
</p:column>
<p:column headerText="Login">
#{funcionarios.login}
</p:column>
<p:column headerText="Perfil">
#{funcionarios.perfil}
</p:column>
<p:column headerText="Alterar">
<p:commandButton value="alterar" update="@all" process="@form" actionListener="#{funcionarioBean.altera}"/>
</p:column>
<f:facet name="footer">
<p:commandButton value="deletar selecionados" update="@all" process="@form" action="#{funcionarioBean.remove}" />
</f:facet>
</p:dataTable>
</h:form>
</p:fieldset>[/code]
até ai beleza,a lista atualiza direitnho,porém quando eu clico para alterar
public void altera(){
funcionario = (Funcionario) funcionarios.getRowData();
}
ele popula os inputs do formulario,como eu queria,ai quando eu clico para alterar…
Não acontece nada,nada,nada posso clicar 5,10,30 vezes que ele não executa o metodo de adicionar e alterar
agora se eu der um F5 e clicar,ele altera…
alguem sabe como eu posso resolver isso?
conseguir alterar sem ter que ficar apertando F5?
o managedBean completo
[code]package br.com.loja_games.controle.pessoal;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
import br.com.loja_games.modelo.Funcionario;
import br.com.loja_games.repositorio.FuncionarioRepositoryImpl;
@ManagedBean
@SessionScoped
public class FuncionarioBean {
Funcionario funcionario = new Funcionario();
DataModel funcionarios;
List funcionarioRemover;
public void adicionaAltera(ActionEvent actionEvent){
EntityManager manager = this.getManager();
FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
System.out.println(funcionario.getId());
System.out.println(funcionario.getId());
if(this.funcionario.getId() == 0 ){
repository.adiciona(funcionario);
System.out.println("Adicionou");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso", "funcionario inserido com sucesso!"));
funcionario = null;
}else{
repository.atualiza(funcionario);
System.out.println("Alterou");
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso", "funcionario alterado com sucesso!"));
funcionario = null;
}
}
public void remove(){
System.out.println(funcionarios);
for(Funcionario funcionario : funcionarioRemover){
EntityManager manager = this.getManager();
FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
repository.remove(funcionario);
}
}
public DataModel<Funcionario> getFuncionarios(){
EntityManager manager = this.getManager();
FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
funcionarios = new ListDataModel(repository.getLista());
return funcionarios ;
}
public void procura(){
System.out.println("passou por aqui...");
EntityManager manager = this.getManager();
FuncionarioRepositoryImpl repository = new FuncionarioRepositoryImpl(manager);
FacesContext fc = FacesContext.getCurrentInstance();
HttpServletRequest request = (HttpServletRequest) fc.getExternalContext().getRequest();
Long id = Long.parseLong(request.getParameter("id"));
System.out.println(id);
funcionario = repository.procura(id);
request = null;
System.out.println(funcionario.getNome());
}
public void altera(){
funcionario = (Funcionario) funcionarios.getRowData();
}
private EntityManager getManager() {
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
HttpServletRequest request = (HttpServletRequest) ec.getRequest();
return (EntityManager) request.getAttribute("EntityManager");
}
public Funcionario getFuncionario() {
return funcionario;
}
public void setFuncionario(Funcionario funcionario) {
this.funcionario = funcionario;
}
public void setFuncionarios(DataModel<Funcionario> funcionarios) {
this.funcionarios = funcionarios;
}
public List<Funcionario> getFuncionarioRemover() {
return funcionarioRemover;
}
public void setFuncionarioRemover(List<Funcionario> funcionarioRemover) {
this.funcionarioRemover = funcionarioRemover;
}
}
[/code]
Obrigado
