[Resolvido] Ajuda com jsf

23 respostas
A

Olá, editando meu template jsf com primefaces, estou tentando trocar o menu do mesmo.
mas ao tentar trocar esse menu:

<h:form>
						  <p:menu style="width: 200px">
							<p:submenu label="Menu">
								<p:menuitem value="Cadastro de funcionarios" icon="ui-icon-key" />
								<p:menuitem value="Cadastro  de clientes" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de  Fornecedores" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de  cartões" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de bancos" icon="ui-icon-contact" />
								
							</p:submenu>
						</p:menu>
					</h:form>

por esse :
http://www.primefaces.org/showcase/ui/panelMenu.jsf

mas da isso ao rodar a pagina :
java.lang.NullPointerException

tentei trocar os beans, por um bean qualquer que tenho na minha aplicação, mas sem sucesso.

23 Respostas

drsmachado

Onde o null pointer é disparado? Qual o stackTrace completo?

A

ele lança no navegador somente isso.

C

Poste o stacktrace completo por favor.
Poste o código da página jsp completo por favor.

Você importou o .jar do Primefaces?
Declarou os componentes que está usando?

Obrigado!

A
Todo template:
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">
	
	<link rel="stylesheet" href="../css/style2.css" />

<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Meu Sistema</title>
	<style type="text/css">
body {
	background-color: #eeeeee;
	font-size: 12px
}
</style>
</h:head>
<h:body>
	<div align="center" >
		<p:layout id ="layout">
			<p:layoutUnit position="north" size="100">
				<h:graphicImage url="../images/pics01.jpg" />
			</p:layoutUnit>

			<p:layoutUnit position="west" size="220">
				<ui:insert name="menu">
					<h:form>
						  <p:menu style="width: 200px">
							<p:submenu label="Menu">
								<p:menuitem value="Cadastro de funcionarios" icon="ui-icon-key" />
								<p:menuitem value="Cadastro  de clientes" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de  Fornecedores" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de  cartões" icon="ui-icon-contact" />
								<p:menuitem value="Cadastro de bancos" icon="ui-icon-contact" />
								
							</p:submenu>
						</p:menu>
					</h:form>
				</ui:insert>
			</p:layoutUnit>
			<p:layoutUnit position="center">
				<ui:insert name="centro">
                        O que estiver aqui será substituido!
                    </ui:insert>
			</p:layoutUnit>
		</p:layout>
	</div>
</h:body>
</html>

Ja esta tudo funcionando, so ao trocar o menu por aquele que falei da erro

A

Stack Trace:
[quote]java.lang.NullPointerException
at org.primefaces.renderkit.OutcomeTargetRenderer.getTargetURL(OutcomeTargetRenderer.java:95)
at org.primefaces.component.menu.BaseMenuRenderer.encodeMenuItem(BaseMenuRenderer.java:78)
at org.primefaces.component.panelmenu.PanelMenuRenderer.encodeRootSubmenu(PanelMenuRenderer.java:118)
at org.primefaces.component.panelmenu.PanelMenuRenderer.encodeMarkup(PanelMenuRenderer.java:64)
at org.primefaces.component.menu.BaseMenuRenderer.encodeEnd(BaseMenuRenderer.java:39)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:889)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:59)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:47)
at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:919)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1903)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1899)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:451)
at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
[code]

asousaj

O erro está aqui

<p:menuitem value="Mobile" outcome="/mobile/index" icon="ui-icon-signal"/>

outcome representa a regra de navegação, como você não tem essa regra mapeada dá erro.

Teste assim

<p:menuitem value="Mobile"  icon="ui-icon-signal"/>
A

[quote=asousaj]O erro está aqui

<p:menuitem value="Mobile" outcome="/mobile/index" icon="ui-icon-signal"/>

outcome representa a regra de navegação, como você não tem essa regra mapeada dá erro.

Teste assim

<p:menuitem value="Mobile"  icon="ui-icon-signal"/>

Tiro e queda, funcionou!, você é o cara! valeu

asousaj

hahaha, sou “o cara” não.

Também estou aprendendo.

A

Aproveitando o topico, outra duvida com jsf.
peguei um form em jsf, mas os campos sempre ficam centralizados.

vejam:

<h:form id="form">  
      
    <p:panel header="Cadastro de Clientes">  
          
        <h:panelGrid id="grid" columns="2" style="margin-bottom:10px">  
            <f:facet name="header">  
                <p:messages />  
            </f:facet>  
          
            <h:outputLabel for="firstname" value="Nome:" />  
            <p:inputText id="firstname"   
                        value="aaaa" />  
            <h:outputLabel for="surname" value="Cpf: *" />  
            <p:inputText id="cpf"   
                        value="cpf" required="true"   
                        requiredMessage="false"/> 
                         <h:outputLabel for="Email" value="Email:" />
...

Mas vai sempre jogando centralizado, queria lado a lado, e esta na parte central do meu template, queria q os campos começassem do lado e não no meio.
e outra os nomes esta com um espaço longo ate os campos, como faço esses reajustes?

asousaj

Cara olha na estrutura de sua página se não tem algo do tipo

<div align="center" >

Qualquer coisa posta a página completa.

A

não, a unica coisa q tem “center” é a configuração do meu template
<p:layoutUnit position=“center”>

mas isso não refere ao meu form.

A

ah cara é mesmo, não tinha. mas eu criei agora e vou definir no css.
mas como eu faço para o segundo campo começar do lado?

asousaj

Tente colocar o f:facet fora do panelGrid. Veja se resolve.

<h:form id="form">  
      
    <p:panel header="Cadastro de Clientes">  
        <f:facet name="header">  
            <p:messages />  
        </f:facet>  

        <h:panelGrid id="grid" columns="2" style="margin-bottom:10px">  
            <h:outputLabel for="firstname" value="Nome:" />  
            <p:inputText id="firstname"   
                        value="aaaa" />  
            <h:outputLabel for="surname" value="Cpf: *" />  
            <p:inputText id="cpf"   
                        value="cpf" required="true"   
                        requiredMessage="false"/> 
                         <h:outputLabel for="Email" value="Email:" />
A

Não funcionou ;x

asousaj

asousaj:

Qualquer coisa posta a página completa.

Nem sempre a causa é no ponto mostrado.
Com toda a página fica mais fácil.
Se tiver usando template poste ele também.

A
Pagina cadastro:
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">
	<link rel="stylesheet" href="../css/style2.css" />
<ui:decorate template="/templates/padrao.xhtml">
	<ui:define name="centro">
		<div align="left" >
			<h:form id="form">

				<p:panel header="Cadastro de Clientes">
<f:facet name="header">
							<p:messages />
						</f:facet>
					<h:panelGrid id="grid" columns="2" style="margin-bottom:10px">
						

						<h:outputLabel for="firstname" value="Nome:" />
						<p:inputText id="firstname" value="aaaa" />
						<h:outputLabel for="surname" value="Cpf: *" />
						<p:inputText id="cpf" value="cpf" required="true"
							requiredMessage="false" />
						<h:outputLabel for="Email" value="Email:" />
						<p:inputText id="email" value="aaaaa" />
						<h:outputLabel for="Cidade" value="Cidade:" />
						<p:inputText id="cidade" value="Cidade" />
						<h:outputLabel for="Estado" value="Estado:" />
						<p:inputText id="Estado" value="aaaaa" />

						<h:outputLabel for="fone" value="Telefone:" />
						<p:inputText id="Fone" value="999" />
						<h:outputLabel for="fone" value="Celular:" />
						<p:inputText id="cel" value="77779" />


						<p:commandButton id="btn" value="Acessar" update="panel"
							ajax="false" action="#{NavegacaoController.menuPrincipal}" />
					</h:panelGrid>

				</p:panel>

			</h:form>
		</div>
	</ui:define>
</ui:decorate>
</html>
Template:
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">
	
	<link rel="stylesheet" href="../css/style2.css" />

<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>Meu Sistema</title>
	<style type="text/css">
body {
	background-color: #eeeeee;
	font-size: 12px
}
</style>
</h:head>
<h:body>
	<div align="center" >
		<p:layout id ="layout">
			<p:layoutUnit position="north" size="100">
				<h:graphicImage url="../images/pics01.jpg" />
			</p:layoutUnit>

			<p:layoutUnit position="west" size="220">
				<ui:insert name="menu">
					<h:form>  
              
    <p:growl id="messages" autoUpdate="true"/>  
  
    <p:panelMenu style="width:200px">  
        <p:submenu label="Financeiro">  
            <p:menuitem value="Cadastro de Clientes" ajax = "false" action ="#{NavegacaoController.cadCliente}" icon="ui-icon-disk" />  
            <p:menuitem value="Cadastro de Fornecedor" actionListener="#{buttonBean.update}"  icon="ui-icon-arrowrefresh-1-w" />  
        </p:submenu>  
        <p:submenu label="Tesouraria">  
            <p:menuitem value="Delete" actionListener="#{buttonBean.delete}"  ajax="false" icon="ui-icon-close"/>  
        </p:submenu>  
        <p:separator />  
        <p:submenu label="Estoque" >  
            <p:submenu label="Links" icon="ui-icon-extlink">  
                <p:submenu label="PrimeFaces" icon="ui-icon-heart">  
                    <p:menuitem value="Home" url="http://www.primefaces.org" icon="ui-icon-home" />  
                    <p:menuitem value="Docs" url="http://www.primefaces.org/documentation.html" icon="ui-icon-document" />  
                    <p:menuitem value="Download" url="http://www.primefaces.org/downloads.html" icon="ui-icon-arrowthick-1-s" />  
                    <p:menuitem value="Support" url="http://www.primefaces.org/support.html" icon="ui-icon-wrench" />  
                </p:submenu>  
            </p:submenu>  
           <p:menuitem value="Mobile"  icon="ui-icon-signal"/>    
        </p:submenu>  
    </p:panelMenu>  
  
</h:form> 



				</ui:insert>
			</p:layoutUnit>
			<p:layoutUnit position="center">
				<ui:insert name="centro">
                        O que estiver aqui será substituido!
                    </ui:insert>
			</p:layoutUnit>
		</p:layout>
	</div>
</h:body>
</html>
asousaj

Se entendi corretamente, a reclamação é que os inputTexts estão afastados dos outputLabels.

Na página “cadastro.xhtml” deixe o botão fora do panelGrid, pois ele é que está deixando a primeira coluna mais larga.
Lembre que o panelGrid gera uma

.
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:p="http://primefaces.org/ui"
	xmlns:f="http://java.sun.com/jsf/core">
<link rel="stylesheet" href="../css/style2.css" />
<ui:decorate template="/templates/padrao.xhtml">
	<ui:define name="centro">
		<div align="left">
			<h:form id="form">

				<p:panel header="Cadastro de Clientes">
					<f:facet name="header">
						<p:messages />
					</f:facet>
					<h:panelGrid id="grid" columns="2" style="margin-bottom:10px">


						<h:outputLabel for="firstname" value="Nome:" />
						<p:inputText id="firstname" value="aaaa" />
						<h:outputLabel for="surname" value="Cpf: *" />
						<p:inputText id="cpf" value="cpf" required="true"
							requiredMessage="false" />
						<h:outputLabel for="Email" value="Email:" />
						<p:inputText id="email" value="aaaaa" />
						<h:outputLabel for="Cidade" value="Cidade:" />
						<p:inputText id="cidade" value="Cidade" />
						<h:outputLabel for="Estado" value="Estado:" />
						<p:inputText id="Estado" value="aaaaa" />

						<h:outputLabel for="fone" value="Telefone:" />
						<p:inputText id="Fone" value="999" />
						<h:outputLabel for="fone" value="Celular:" />
						<p:inputText id="cel" value="77779" />


					</h:panelGrid>
					<p:commandButton id="btn" value="Acessar" update="panel"
						ajax="false" action="#{NavegacaoController.menuPrincipal}" />

				</p:panel>

			</h:form>
		</div>
	</ui:define>
</ui:decorate>
</html>
A

asousaj:
Se entendi corretamente, a reclamação é que os inputTexts estão afastados dos outputLabels.

sim, e resolveu com sua dica, valeu.
mas eu perguntei outra coisa tambem, como colocar um componente do lado do outro.
exemplo a partir do 3 input, quero colocar ao lado?

asousaj

adam_sandler:

exemplo a partir do 3 input, quero colocar ao lado?

Explique melhor.

Então quer Cidade,Estado,Telefone e Celular tudo numa linha só?

A

isso, na horizontal

asousaj

Cara neste caso eu usaria o panelGrid do primefaces.

<p:panelGrid style="margin-bottom:10px;" styleClass="semBorda">
						<p:row>
							<p:column>
								<h:outputLabel for="firstname" value="Nome:" />
							</p:column>
							<p:column colspan="7">
								<p:inputText id="firstname" value="aaaa" />
							</p:column>
						</p:row>
						<p:row>
							<p:column>
								<h:outputLabel for="surname" value="Cpf: *" />
							</p:column>
							<p:column colspan="7">
								<p:inputText id="cpf" value="cpf" required="true"
									requiredMessage="false" />
							</p:column>
						</p:row>
						<p:row>
							<p:column>
								<h:outputLabel for="Email" value="Email:" />
							</p:column>
							<p:column colspan="7">
								<p:inputText id="email" value="aaaaa" />
							</p:column>
						</p:row>
						<p:row>
							<p:column>
								<h:outputLabel for="Cidade" value="Cidade:" />
							</p:column>
							<p:column>
								<p:inputText id="cidade" value="Cidade" />
							</p:column>
							<p:column>
								<h:outputLabel for="Estado" value="Estado:" />
							</p:column>
							<p:column>
								<p:inputText id="Estado" value="aaaaa" />
							</p:column>
							<p:column>
								<h:outputLabel for="fone" value="Telefone:" />
							</p:column>
							<p:column>
								<p:inputText id="Fone" value="999" />
							</p:column>
							<p:column>
								<h:outputLabel for="fone" value="Celular:" />
							</p:column>
							<p:column>
								<p:inputText id="cel" value="77779" />
							</p:column>
						</p:row>
					</p:panelGrid>

No template adicionaria na tag STYLE

.semBorda tr,.semBorda td {
	border: none !important;
}
A

valeu cara, so nao entendi a configuração no style.
mas funcionou tudo.
tem algum material que você me indica de jsf?

asousaj

adam_sandler:
valeu cara, so nao entendi a configuração no style.
mas funcionou tudo.
tem algum material que você me indica de jsf?

O h:panelGrid por padrão não exibe as bordas, o panelGrid do primefaces é o contrário. Por isso o css para colocar border:none nas

e da tabela.

Materiais gratuitos:
Apostila k19-k12-desenvolvimento-web-com-jsf2-e-jpa2.pdf
Apostila k19-k22-desenvolvimento-web-avancado-com-jsf2-ejb3.1-e-cdi.pdf
Apostila caelum-java-testes-jsf-web-services-design-patterns-fj22.pdf

Livros pagos:
JSF Eficaz -Editora CasaDoCodigo - Esse depois de ler outros materiais
Beginning JSP, JSF and Tomcat - Editora Apress - É em inglês

Criado 14 de janeiro de 2014
Ultima resposta 19 de jan. de 2014
Respostas 23
Participantes 4