Bom dia, estou com o seguinte problema, no meu sistema eu tenho uma tela utilizando wizard do primefaces, na primeira tela tenho somente uma p:datatable que eu seleciono uma linha e avanço para a próxima tela, nesta próxima tela tenho duas tables que faz que uma adiciona itens na outra (como se fosse uma picklist), porém o que esta acontecendo é que quando eu clico para adicionar ou salvar (commandButton), a action não aciona o MB … Alguém poderia me ajudar.
Primefaces não chama o MB
13 Respostas
Coloca no botão ajax=“false”
Abraço
Já havia feito isso, dá erro direto.
Qual erro ?
SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/ControlMobileWeb2.0] threw exception [null] with root cause
java.lang.NullPointerException
at org.primefaces.component.datatable.DataHelper.decodeFilters(DataHelper.java:157)
at org.primefaces.component.datatable.DataTableRenderer.decode(DataTableRenderer.java:55)
at javax.faces.component.UIComponentBase.decode(UIComponentBase.java:790)
at javax.faces.component.UIData.processDecodes(UIData.java:980)
at org.primefaces.component.datatable.DataTable.processDecodes(DataTable.java:500)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at org.primefaces.component.wizard.Wizard.processDecodes(Wizard.java:189)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at org.primefaces.component.panel.Panel.processDecodes(Panel.java:277)
at javax.faces.component.UIForm.processDecodes(UIForm.java:216)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at javax.faces.component.UIComponentBase.processDecodes(UIComponentBase.java:1042)
at javax.faces.component.UIViewRoot.processDecodes(UIViewRoot.java:941)
at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:304)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Sem o ajax=false não da erro pois o método não é executado.
Com o ajax=fase esta dando erro de java.lang.NullPointerException ou seja você esta usando um atributo que não foi inicializado da uma olhada esta faltando colocar Objeto objeto = new Objeto() para alguma coisa ai.
Abraço,
Marcelo Gomes
amigo como você esta chamando o seu método na pagina?
e como esta o seu metodo no Mb?
Segue meu managend Bean, quando não utilizo o componente wizard funciona perfeitamente.
@ManagedBean(name = "perfilAcessoBean")
@ViewScoped
public class PerfilAcessoBean {
private PerfilAcesso perfilAcesso;
private List<Perfil> listPerfil;
private List<Acesso> source;
private List<Acesso> target;
private Acesso acesso;;
private Perfil perfil;
private Perfil selectPerfil;
private Acesso[] selectAcessos;
private Acesso[] selectAcessos2;
private String pesquisar;
private ContextoBean contextoBean;
public PerfilAcessoBean() {
this.perfilAcesso = new PerfilAcesso();
this.listPerfil = new ArrayList<Perfil>();
this.source = new ArrayList<Acesso>();
this.target = new ArrayList<Acesso>();
this.acesso = new Acesso();
this.perfil = new Perfil();
this.selectPerfil = new Perfil();
this.selectAcessos = new Acesso[10];
this.selectAcessos2 = new Acesso[10];
this.pesquisar = "";
this.contextoBean = new ContextoBean();
}
public ContextoBean getContextoBean() {
return contextoBean;
}
public void setContextoBean(ContextoBean contextoBean) {
this.contextoBean = contextoBean;
}
public Acesso[] getSelectAcessos2() {
return selectAcessos2;
}
public void setSelectAcessos2(Acesso[] selectAcessos2) {
this.selectAcessos2 = selectAcessos2;
}
public List<Acesso> getSource() {
AcessoRN acessoRN = new AcessoRN();
this.source = acessoRN.listAll();
return source;
}
public void setSource(List<Acesso> source) {
this.source = source;
}
public List<Acesso> getTarget() {
return target;
}
public void setTarget(List<Acesso> target) {
this.target = target;
}
public Acesso[] getSelectAcessos() {
return selectAcessos;
}
public void setSelectAcessos(Acesso[] selectAcessos) {
this.selectAcessos = selectAcessos;
}
public String getPesquisar() {
return pesquisar;
}
public void setPesquisar(String pesquisar) {
this.pesquisar = pesquisar;
}
public Perfil getSelectPerfil() {
return selectPerfil;
}
public void setSelectPerfil(Perfil selectPerfil) {
this.selectPerfil = selectPerfil;
}
public Perfil getPerfil() {
return perfil;
}
public void setPerfil(Perfil perfil) {
this.perfil = perfil;
}
public Acesso getAcesso() {
return acesso;
}
public void setAcesso(Acesso acesso) {
this.acesso = acesso;
}
public PerfilAcesso getPerfilAcesso() {
return perfilAcesso;
}
public void setPerfilAcesso(PerfilAcesso perfilAcesso) {
this.perfilAcesso = perfilAcesso;
}
public List<Perfil> getListPerfil() {
PerfilRN perfilRN = new PerfilRN();
this.listPerfil = perfilRN.listAll(contextoBean.getUsuarioLogado()
.getEmpresa());
return this.listPerfil;
}
public String onFlowProcess(FlowEvent event) {
return event.getNewStep();
}
public String save() {
if (selectPerfil == null) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(
"Você deve selecionar um perfil para cadastrar"));
} else {
PerfilAcessoRN perfilAcessoRN = new PerfilAcessoRN();
for (int i = 0; i < target.size(); i++) {
perfilAcesso.setPerfil(selectPerfil);
perfilAcesso.setAcesso(target.get(i));
perfilAcessoRN.save(perfilAcesso);
}
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(
"Promotor x Acesso cadastrado com sucesso"));
this.perfilAcesso = new PerfilAcesso();
this.selectAcessos = null;
this.selectAcessos2 = null;
this.target = new ArrayList<Acesso>();
this.selectPerfil = new Perfil();
}
return "sucessoPerfilAcesso";
}
public void adicionarAcesso() {
System.out.println("Entrou no adicionar");
for (int i = 0; i < this.selectAcessos.length; i++) {
target.add(selectAcessos[i]);
source.remove(selectAcessos[i]);
}
}
public void removerAcesso() {
for (int i = 0; i < this.selectAcessos2.length; i++) {
target.remove(selectAcessos2[i]);
}
}
public String novoPerfilAcesso() {
this.perfilAcesso = new PerfilAcesso();
return "perfilAcesso";
}
}
na sua pagina vc ta chamando o mb usando o actionListener ??
Não. Já fiz esse teste e não funciona.
Segue o código do meu .xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!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://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="/template/interna.xhtml">
<ui:define name="titulo">Perfil x Acesso</ui:define>
<ui:define name="corpo">
<h:form id="formulario">
<h:inputHidden
value="#{perfilAcessoBean.perfilAcesso.id_perfil_acesso}" />
<div id="loading">
<p:ajaxStatus rendered="true">
<f:facet name="start">
<h:graphicImage library="images" name="loading.gif" />
</f:facet>
<f:facet name="complete">
<h:outputText value="" />
</f:facet>
</p:ajaxStatus>
</div>
<p:panel header="Cadastro de Perfil x Acesso">
<p:wizard>
<p:tab title="Perfil" id="idPerfil">
<h:panelGroup layout="block">
<h:panelGrid style="width:100%">
<p:dataTable id="dataPerfil" style="width:100%"
value="#{perfilAcessoBean.listPerfil}" var="perfil"
paginator="true" rows="10" selectionMode="single"
selection="#{perfilAcessoBean.selectPerfil}"
rowKey="#{perfil.descricao}">
<p:column headerText="Perfil" filterBy="#{perfil.descricao}">
<h:outputText value="#{perfil.descricao}" />
</p:column>
</p:dataTable>
</h:panelGrid>
</h:panelGroup>
</p:tab>
<p:tab title="Acesso" id="idAcesso">
<p:toolbar>
<p:toolbarGroup align="left">
<p:commandButton action="#{perfilAcessoBean.save}"
value="Salvar" image="ui-icon ui-icon-disk" ajax="false" />
<p:spacer width="3" />
<p:commandButton action="#{perfilBean.cancelar}"
value="Cancelar" ajax="false" image="ui-icon ui-icon-cancel" />
<p:separator />
<h:outputText
value="Perfil Selecionado : #{perfilAcessoBean.selectPerfil.descricao}" />
</p:toolbarGroup>
</p:toolbar>
<p:messages />
<h:panelGrid columns="3"
columnClasses="coluna1asso, coluna2asso, coluna3asso">
<p:dataTable id="dataAcesso1" value="#{perfilAcessoBean.source}"
style="width:100%" var="acesso1" paginator="true" rows="10"
selectionMode="multiple"
selection="#{perfilAcessoBean.selectAcessos}"
rowKey="#{acesso1.descricao}">
<p:column headerText="Acesso" filterMatchMode="contains"
sortBy="#{acesso1.descricao}" filterBy="#{acesso1.descricao}">
<h:outputText value="#{acesso1.descricao}" />
</p:column>
</p:dataTable>
<h:panelGrid style="width:100%">
<p:commandButton image="ui-icon ui-icon-arrowrefresh-1-w"
value="Adicionar" action="#{perfilAcessoBean.adicionarAcesso}"
ajax="false" update="dataAcesso1, dataAcesso2">
</p:commandButton>
<p:commandButton image="ui-icon ui-icon-close" value="Remover"
action="#{perfilAcessoBean.removerAcesso}"
update="dataAcesso1, dataAcesso2">
</p:commandButton>
</h:panelGrid>
<p:dataTable id="dataAcesso2" value="#{perfilAcessoBean.target}"
style="width:100%" var="acesso2" paginator="true"
selection="#{perfilAcessoBean.selectAcessos2}" rows="10"
selectionMode="multiple" rowKey="#{acesso2.descricao}">
<p:column headerText="Acessos Adicionados"
filterBy="#{acesso2.descricao}">
<h:outputText value="#{acesso2.descricao}" />
</p:column>
</p:dataTable>
</h:panelGrid>
</p:tab>
</p:wizard>
</p:panel>
</h:form>
</ui:define>
</ui:composition>
</html>
Use sessionScoped por causa da paginação
Já havia feito isso… Dá erro! rssrs
amigo tenta usar o <h:commandButton> no lugar de <p:commandButton >