Primefaces não chama o MB

13 respostas
W

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.

13 Respostas

M

Coloca no botão ajax=“false”

Abraço

W

Já havia feito isso, dá erro direto.

M

Qual erro ?

W
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)
M

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

marllondsp

amigo como você esta chamando o seu método na pagina?
e como esta o seu metodo no Mb?

W

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";
	}

}
marllondsp

na sua pagina vc ta chamando o mb usando o actionListener ??

W

Não. Já fiz esse teste e não funciona.

W

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>
marcelo.silva

Use sessionScoped por causa da paginação

W

Já havia feito isso… Dá erro! rssrs

marllondsp

amigo tenta usar o <h:commandButton> no lugar de <p:commandButton >

Criado 22 de novembro de 2011
Ultima resposta 23 de nov. de 2011
Respostas 13
Participantes 4