Header.jspf[RESOLVIDO]

31 respostas
L

bom dia galera …
estou estudando a aposlita de web com vraptor…

e queria saber exatamente(pois não consegui entender)…o que exatamente tem que ter no header.jspf, pq?e onde eu coloco ele?

Obrigada! :shock:

31 Respostas

Z

Ele é um pedaço de um arquivo jsp

vc coloca ele na sua pasta junto com os demais arquivos jsp

L

ah tah entendi…
vc saberia me informar o motivo desse erro;

Caused by: java.lang.IllegalArgumentException: id to load is required for loading
at org.hibernate.event.LoadEvent.(LoadEvent.java:74)

:?:

obrigada

G

Você está tentando fazer load de um objeto passando o ID como nulo. Sempre que você tenta carregar um objeto você precisa passar o ID do mesmo, e esse ID não pode ser nulo.

L

junto com a apostila do VRaptor vem um zip chamado goodbuy-auxiliar, nele vc acha o header.jspf e o footer.jsp que vc tem que colocar na pasta WebContent

L

então lucas eu coloquei o header.jspf e o footer.jsp…o footer esta assim:

[b]

</div>
[/b]

não esta faltando algo?..então na apostila na web ja teria que esta assim:

mas o meu esta assim:

L

então lucas eu coloquei o header.jspf e o footer.jsp…o footer esta assim:

não esta faltando algo?..então na apostila na web ja teria que esta assim:

mas o meu esta assim:



L

ah reparei que no meu jsp(lista.jsp)

<c:forEach items="${produtoList}" var=“produto”>

<tr>


<td>${produto.nome}</td>


<td>${produto.descricao}</td>


<td>${produto.preco}</td>


<td><a>Editar</a></td>


<td><a>Remover</a></td>


</tr>


</c:forEach>

se eu tirar o ${produto.id} e colocar,por exemplo, o nº 1 e clicar em editar ele vai para a tela e consigo fazer a alteração…
na web eu não consigo ver a alteração,pq esta tudo em branco só aprece o editar e remover mas no sql a alteração foi feita.

L

como está o seu método lista do produtosController?

L

Lucas esta assim:

<a class="mention" href="/u/resource">@Resource</a>

public class ProdutosController {

private final ProdutoDao dao;

private final Result result;

public ProdutosController(ProdutoDao dao, Result result){

this.dao=dao;

this.result=result;

}

public void adiciona(Produto produto){

dao.salva(produto);

result.redirectTo(ProdutosController.class).lista();

}	

public void formulario(){	

}

public List lista(){

return dao.listaTudo();

}

public Produto edita(Long id){

return dao.carrega(id);

}

public void altera(Produto produto){

dao.atualiza(produto);

result.redirectTo(ProdutosController.class).lista();

}

public void remove(Long id){

Produto produto=dao.carrega(id);

dao.remove(produto);

result.redirectTo(ProdutosController.class).lista();

}
L

dá uma olhada se seu dao.listaTudo() está retornando objetos Produto populados… se não estiver não vai funcionar a parte do jsp

L

Desculpa Lucas mas não consegui entender…

o meu produto dao esta assim:ProdutoDao

{…}

public List listaTudo(){

return this.session.createCriteria(Produto.class).list();

}

{…}
R

não consegui entender que erro vc está tendo Lita!

L

assim…eu tenho um fomulario onde preencho com nome,descrição,preço qdo clico e enviar ele vai para outra tela que é o meu jsp: lista.jsp
esse jsp esta vindo assim:

Nome Descrição Preço
xxxx xxxxxxx xxx Editar Remover

onde esta o xxxx…era para vim com os dados que eu tinha preenchido- só que esta em branco.
e se eu tentar apertar o editar-por exemplo- aparece o erro:

java.lang.IllegalArgumentException: id to load is required for loading

entendeu?!:slight_smile:

R

entendi, posta o código da sua lista.jsp e do deu DAO.

L
@Component

public class ProdutoDao {

private final Session session;

public ProdutoDao(){

this.session=CriadorDeSession.getSession();

}

public List listaTudo(){

return this.session.createCriteria(Produto.class).list();

}

public void salva(Produto produto) {

Transaction tx= session.beginTransaction();

session.save(produto);

tx.commit();

}

public void remove(Produto produto){

Transaction tx=session.beginTransaction();

this.session.delete(produto);

tx.commit();

}

public Produto carrega(Long id){

return (Produto) this.session.load(Produto.class, id);

}	

public void atualiza(Produto produto){

Transaction tx= session.beginTransaction();

this.session.update(produto);

tx.commit();

}}

lista.jsp

Descrição Nome Preço
${produto.nome} ${produto.descricao} ${produto.preco} Editar Remover
Z

Acho melhor vc fazer um debug,

o hibernate não deve estar trazendo os dados do banco na sua lista

qdo vc tenta carregar a página dá algum erro no log do servidor?

R

zoren:
Acho melhor vc fazer um debug,

o hibernate não deve estar trazendo os dados do banco na sua lista

qdo vc tenta carregar a página dá algum erro no log do servidor?

é o que tah parecendo mesmo Lita!
Seu código tah certo!

L

oh eu reinicio o tomcat e vou na url e digito a página que eu quero

a única coisa que aparece no console do eclipse é:

Hibernate:
select
this_.id as id0_0_,
this_.Descricao as Descricao0_0_,
this_.nome as nome0_0_,
this_.preco as preco0_0_
from
Produto this_

:?:

R

Lita só mais uma dúvida...

vc colocou a taglib no cabeçalho da página lista.jsp?

assim:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <link href="<c:url value="/css/estilos.css"/>" rel="stylesheet" type="text/css" />
        <title>Lista de Produtos</title>
    </head>

haaaa... e o seu id está com o @Id lá na sua classe produtos?

L

então lita… tenta debugar ou imprimir o que o dao.listaTudo tá retornando…

faz algo do tipo:

public List<Produto> lista(){
   List<Produto> produtos = dao.listaTudo()
   System.out.println(produtos);
   return produtos;
}

ve o que aparece no console do servidor…

o que pode estar acontecendo também é que os seus jsps estão com expression language desabilitados…

Z

O hibernate não deixa usar uma entidade que não possua chave primária

tbm pensei na tag, mas acho q EL não se enquadra no JSTL

o jeito é criar um teste com o JUnit ou usar debug pra ver se a lista está sendo preenchida

L

galera muito obrigada…
Ramon era isso mesmo que estava faltando para dá certo…

agora funciona normalmente…

só não entendi muito bem o pq que é necessário utilizar o:

<%@page contentType=“text/html” pageEncoding=“UTF-8”%>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

" rel="stylesheet" type="text/css" /> Lista de Produtos

vc saberia me explicar exatamente o motivo desse?

R
Lita Mclean:
galera muito obrigada..... Ramon era isso mesmo que estava faltando para dá certo....

agora funciona normalmente.....

só não entendi muito bem o pq que é necessário utilizar o:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

"http://www.w3.org/TR/html4/loose.dtd">




" rel="stylesheet" type="text/css" />
Lista de Produtos

vc saberia me explicar exatamente o motivo desse?

Olha só... Quando vc tem algo na sua página usando o aki:
<c:forEach items="${errors}" var="error">
                        <li>${error.category } - ${error.message }</li>
                    </c:forEach>
vc tem que ter chamado a taglib antes, e essa chamada ocorre com isto:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
acho que é tipo um import que vc não fez na sua classe, entende? não é necessário todo esse trecho:
<%@page contentType="text/html" pageEncoding="UTF-8"%>  
 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
   
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
     "http://www.w3.org/TR/html4/loose.dtd">  
   
 <html>  
     <head>  
         <meta http-equiv="content-type" content="text/html; charset=utf-8" />  
         <link href="<c:url value="/css/estilos.css"/>" rel="stylesheet" type="text/css" />  
         <title>Lista de Produtos</title>  
     </head>

isso foi só pra te mostrar onde fica a taglib...

aki tem um pouco mais sobre as taglib's
na apostila da caelum fj-21 se não me engano
e nesse site tbm:
taglib

L

ah tah …agora eu entendi Ramon…hehe
realmenet eu tinha colocado aquele codigo todo…mas agora ficou claro…

obrigada!!!
bjus

R

Lita Mclean:
ah tah …agora eu entendi Ramon…hehe
realmenet eu tinha colocado aquele codigo todo…mas agora ficou claro…

obrigada!!!
bjus

não esquece de editar o post e colocar [RESOLVIDO]

blz?

bjos t+

L

certo vou fazer isso agora…
xau

H

Pessoal, sei o que o tópico está [Resolvido], mas não entendi muito bem o funcionamento do header e do footer.

Seguindo os exercícios da apostila fj-28, o arquivo que fará todos os jsps “puxarem” o header e o footer é web.xml??

<jsp-config>
		<jsp-property-group>
			<description>goodbuy</description>
			<display-name>Good Buy</display-name>
			<url-pattern>*.jsp</url-pattern>
			<include-prelude>/header.jspf</include-prelude>
			<include-coda>/footer.jspf</include-coda>
		</jsp-property-group>
	</jsp-config>

Apenas com essa configuração todos os demais arquivos jsp que possuo farão o include do header e do footer?

Os arquivos [header.jspf e footer.jspf] devem ficar na raiz da pasta WebContent?
E no caso as taglibs, eu necessito declarar em cada jsp que eu for utilizar ou declaro todas no header.jspf?

vlw…

L

sim

Sim, só fazendo isso todos os jsps ficam com esse header e footer.

do jeito que foi declarado, sim.

Se eu não me engano, colocando no header.jspf já funciona

H

Opa… excelente explicação… muito clara…

Mas, pergunto eu:

O exemplo em que o header.jspf contenha o menu principal do site, todas as páginas o incluirão.
Como ficaria a parte administrativa do site que possuirá um menu “diferente”, com mais opções?
Ou caso o menu seja diferente para determinados usuários, há como “sobrescrevê-lo”, para que determinado jsp não puxe o menu “padrão”?

Ou mesmo se houver, digamos, 3 tipos de header, 1 padrão, 1 para usuários logados e 1 outro para a área administrativa. Há como fazer essa distinção de qual deles um determinado jsp puxará?

Vlw…

L

só usando jsp dá pra fazer padrões de url… tipo tudo que começa com /admin passa pelo header admin, etc…

outra solução seria ficar fazendo ifs no header.jspf pra saber qual parte mostrar

ou ainda se for totalmente diferente vc pode usar frameworks como o sitemesh ou o tiles

G

Lita Mclean:
bom dia galera …
estou estudando a aposlita de web com vraptor…

e queria saber exatamente(pois não consegui entender)…o que exatamente tem que ter no header.jspf, pq?e onde eu coloco ele?

Obrigada! :shock:

Vou fácil!

Criado 8 de fevereiro de 2010
Ultima resposta 25 de out. de 2011
Respostas 31
Participantes 7