Este é um post disponível para assinantes MVPVideo: Aplicação Completa Utilizando Hibernate - Aula 8 - Camada de Apresentação
Nesta aula continuamos a criar a parte visual da aplicação.
Título: Aplicação Completa Utilizando
Hibernate - Aula 8 - Camada de Apresentação
Tempo: 00:15:20
Mini-Resumo: Nesta aula continuamos a criar a
parte visual da aplicação preocupando-se com a definição da tela do produto e
continuando a dar dicas de como implementar cada uma das partes relacionadas a
esta na aplicação em geral.
Tecnologias Utilizadas: Java SE 6, NetBeans 6.5,
Hibernate 3, JavaServer Faces
Exemplos construídos: Detalhamos a criação da interface
do produto e suas propriedades, também detalhamos alguns macetes na criação da conexão
entre o Manage4d bean e o Hibernate no caso de utilizar propriedades
referenciadas por POJOS e não por classes normais.
Palavras chaves: netbeans6 hibernate jpa orm
entity entidade mapeamento jsf

26 COMENTÁRIOS
no momento de listar os Produtos, está trazendo a seguinte exceção
Caused by: org.apache.jasper.el.JspELException: /products.jsp(19,12) ''#{ProductFaces.cachedProducts}'' Error reading ''cachedProducts'' on type br.com.faces.ProductFaces
ROOT CAUSE
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [br.com.entidades.User#6]
Não estou entendendo mesmo, se puder ajudar eu agradeço...
Sua base de dados está consistente ? tente zerar e começar do inicio... isto esta me cheirando entidades com relacionamento perdido...

primeiro queria te parabenizar pelas video-aulas que vem me ajudando bastantee venho aprendendo muito com elas.
Bom, eu acompanhei todas as video-aulas desse curso porém agora me ocorreu um erro, o mesmo erro que ocorre com você na video-aula:
"javax.servlet.ServletException: /newproduct.jsp(23,20) '#{ProductFace.selectedProduct.id}' Target Unreachable, 'selectedProduct' returned null
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)"
Na vide-aula você resolveu dizendo que faltava colocar o contexto, porém eu não consegui resolv-lo.
Você, ou o pessoal poderia me ajudar dizendo como posso resolver esse problema??
Grato.
Resolve da sequinte forma:
onde esta:
private XXX selectedProcuct;
substitua por:
private XXX selectedProcuct = new XXX();
Assim voce inicia o seu formbean com uma classe desde o inicio...

Valeu pela força !
Este erro ocorre porque a propriedade prodSelecionado está NULL...
Crie ela no construtor:
prodSelecionado = new Produto();
Valeu !

Primeiramente Parabens pelo curso.
Estou com um erro ja comentado pelos nosso colegas
é este:
javax.servlet.ServletException: /NewProduct.jsp(22,15)
'#{Productface.selectedProduct.id}' Target Unreachable, 'selectedProduct' returned null
isto acontece na ora de inserir ou cancelar Produtos , ja tentei resolver com algumas dicas dadas.
Quando declaro assim : private Product selectedProduct = new Product();
o erro não aparece mas tambem não insere e e nem retorna para Pagina Product onde mostra a lista de Produtos.
Se poder ajudar-me ficarei grato.
Ela realmente existe ?
E o seu metodo de adição está sendo executado mesmo ?
Fico no aguardo !

Dyego to com 1 problema na aplicação e num consigo arrumar você ideia do que pode ser, qdo tento imprimir os usuarios na tela, da esse erro..
exception
javax.servlet.ServletException: /index.jsp(16,2) '#{UsuarioFace.cachedUser}' Error reading 'cachedUser' on type Faces.UsuarioFace
javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)
root cause
org.apache.jasper.el.JspELException: /index.jsp(16,2) '#{UsuarioFace.cachedUser}' Error reading 'cachedUser' on type Faces.UsuarioFace
org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:107)
javax.faces.component.UIData.getValue(UIData.java:582)
javax.faces.component.UIData.getDataModel(UIData.java:1063)
javax.faces.component.UIData.setRowIndex(UIData.java:417)
com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:85)
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:785)
javax.faces.component.UIData.encodeBegin(UIData.java:879)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:884)
javax.faces.render.Renderer.encodeChildren(Renderer.java:137)
javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:809)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:886)
javax.faces.component.UIComponent.encodeAll(UIComponent.java:892)
com.sun.faces.application.ViewHandlerImpl.doRenderView(ViewHandlerImpl.java:244)
com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:175)
com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
root cause
java.lang.NoClassDefFoundError: org/hibernate/Session
Você tem Ideia do que seja Obrigado!!!

estou com um erro que uma outra pessoa ai passou.
na hora de adicionar um novo produto e também uma nova venda é apresentada a seguinte mensagem.
Feb 14, 2009 8:36:27 PM com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id_jsp_43059340_2:j_id_jsp_43059340_7[severity=(ERROR 2), summary=(Conversion Error setting value ''''''''Mauricio'''''''' for ''''''''null Converter''''''''. ), detail=(Conversion Error setting value ''''''''Mauricio'''''''' for ''''''''null Converter''''''''. )]
conforme você orientou o outro colega, gerei automaticamente pelo netbeans os hashcode e equalscode mesmo assim o erro continua, tanto quando eu clico no botão CANCEL como no botão ADD.
e também fiz o método toString() tudo conforme vc orientou na video aula
Agradeço com antecedência
Esta instrução você pode ver na serie de video aulas "Construindo uma aplicação completa utilizando JSF"
Valeu !
newproduct.jsp
<h:form>
<h:messages />
Id: <h:inputText value="#{ProductFaces.selectdProdut.id}" /><br>
Nome: <h:inputText value="#{ProductFaces.selectdProdut.name}" /><br>
Price: <h:inputText value="#{ProductFaces.selectdProdut.price}" /><br>
Stock: <h:inputText value="#{ProductFaces.selectdProdut.stock}" /><br>
Owner: <h:selectOneMenu value="#{ProductFaces.selectdProdut.owner}" >
<f:selectItems value="#{ProductFaces.usersOfSystem}" />
<f:converter converterId="ProductConvert" />
</h:selectOneMenu>
<br>
<h:commandButton action="gotoListProduct" value="Cancelar" />
<h:commandButton action="#{ProductFaces.finishAddNewProduct}" value="Add" />
</h:form>
________________________________________________________________________________________
faces-config.xml
<converter>
<converter-id>ProductConvert</converter-id>
<converter-class>devmedia.faces.ProductConvert</converter-class>
</converter>
________________________________________________________________________________________
ProductFaces.java
public List<SelectItem> getUsersOfSystem() {
List<SelectItem> toReturn = new LinkedList<SelectItem>();
for (Users usr : userDAO.getUsers()) {
toReturn.add(new SelectItem(usr,usr.getName()));
}
return toReturn;
}
________________________________________________________________________________________
E acredito que aqui que mora o perigo pois a minha pagina jsf fica travada, ou seja, não consigo navegar e como os commandButtom não funcionase.
ProductConvert.java
public class ProductConvert implements Converter {
UserDAO userDAO = new UserDAO();
public ProductConvert() {
}
//minha duvida e aqui!!!
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
Integer id = Integer.parseInt(value);
return userDAO.getUsers();
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Users usr = (Users)value;
return usr.getName().toString();
}
}
_______________________________________________________________________________________
Segue tambem o UserDAO
public class UserDAO extends GenericDAO {
private Session session;
public UserDAO(Session session) {
this.session = session;
}
public UserDAO() {
this.session = getSession();
}
public int addUser(Users us) {
Session ses = getSession();
ses.save(us);
ses.getTransaction().commit();
ses.close();
return us.getId();
}
public void removeUser(Users us) {
Session ses = getSession();
ses.delete(us);
ses.getTransaction().commit();
ses.close();
}
public void setUser(Users us) {
Session ses = getSession();
ses.update(us);
ses.getTransaction().commit();
ses.close();
}
public boolean isValidLoginAndPassword(String login, String password) {
boolean valid;
Session ses = getSession();
Query query = ses.createQuery("from Users usr where usr.login = :lg and usr.password = :pw");
query.setString("lg", login);
query.setString("pw", password);
Users usr = (Users) query.uniqueResult();
valid = (usr != null);
ses.getTransaction().commit();
ses.close();
return valid;
}
public boolean isValidLoginAndPasswordWithNewVersion(String login, String password){
return getPurePojo("from Users usr where usr.login = ?1 usr.password = ?2", login, password) != null;
}
public List<Users> getUsers(){
return getPureList(Users.class, "from Users usr");
}
public Users getUsers(int idUser){
Users usr = getPojo(Users.class, idUser);
return usr;
}
}
Video: Como trabalhar com validadores e conversores em JavaServer Faces
Aula Unica da serie!!!
Muito obrigado por ter desenvolvido todas essas videos aulas tão didáticas e com ótimo nivel de conteudo. A questão é se for possivel amigo desenvolva uma uma serie de video aula integrando o Struts2 com ajax e Hibernate, JPA etc... Grande amigo "Enriquessa" a nossa vida profissional com mais essa serie!!!!!!!!!
Muito obrigado por ter desenvolvido todas essas videos aulas tão didáticas e com ótimo nivel de conteudo.
Amigo, se estiver no seu limite, por favor desenvolva uma serie de aulas integrando struts2 + hibernate + ireport.
Agradeço desde já.

HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: /novoproduto.jsp(21,20) '#{ProdutoFace.selectedProduto.id}' Target Unreachable, 'selectedProduto' returned null javax.faces.webapp.FacesServlet.service(FacesServlet.java:256)root cause
org.apache.jasper.el.JspPropertyNotFoundException: /novoproduto.jsp(21,20) '#{ProdutoFace.selectedProduto.id}' Target Unreachable, 'selectedProduto' returned null org.apache.jasper.el.JspValueExpression.getType(JspValueExpression.java:61) com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer.getConvertedValue(HtmlBasicInputRenderer.java:81) javax.faces.component.UIInput.getConvertedValue(UIInput.java:934) javax.faces.component.UIInput.validate(UIInput.java:860) javax.faces.component.UIInput.executeValidate(UIInput.java:1065) javax.faces.component.UIInput.processValidators(UIInput.java:666) javax.faces.component.UIForm.processValidators(UIForm.java:229) javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)note The full stack trace of the root cause is available in the Apache Tomcat/6.0.16 logs.
Apache Tomcat/6.0.16
Pessoal alguem ai de cima ou vc mesmo Dyego posso me ajuda com esse erro pois ja testei todas as suas dicas acima mas nao deu certo quando eu crio a instancia no construtor ai nao da mais o erro mas nao funciona
esperos respostas obrigado
private PRoduto selectedProduto;
troque para
private PRoduto selectedProduto = new Produto();

classe do Conversor:public class conversorPeriodo implements Converter{ private PeriodoDAO periodoDAO = new PeriodoDAO(); public conversorPeriodo() { } public Object getAsObject(FacesContext context, UIComponent component, String value) { Integer codPeriodo = Integer.parseInt(value.toString()); return periodoDAO.getPeriodo(codPeriodo); } public String getAsString(FacesContext context, UIComponent component, Object value) { return ((periodo)value).getDescricao(); //return value.toString(); }
Voce criou como INTEIRO , e tem que ser uma string :)

Conversor:public Object getAsObject(FacesContext context, UIComponent component, String value) { return periodoDAO.getPeriodoByCod(Integer.parseInt(value)); } public String getAsString(FacesContext context, UIComponent component, Object value) { return value.toString(); }
getPeriodoByCodpublic List<periodo> getPeriodoByCod(int cod) { return getPureList(periodo.class, "from periodo per", cod); } getPureList protected <T extends Serializable> List<T> getPureList(Class<T> classToCast,String query,Object... params) { Session ses = getSession(); Query qr = ses.createQuery(query); for (int i = 1; i <= params.length; i++) { qr.setParameter(i, params[i-1]); } @SuppressWarnings("unchecked") List<T> toReturn = qr.list(); ses.getTransaction().commit(); ses.close(); return toReturn; }
Desde já, valew!
Percebi q não estava passando nenhum parâmetro na hql, agora não dá erro, mas tb não tá finalizando a inserção:
Segue o detalhe do código
Form:
<h:form>
<h:messages/>
<%-- Código: <h:inputText value="#{disciplinaFace.disciplinaSelecionado.cod}" /> <br/> --%>
Disciplina: <h:inputText value="#{disciplinaFace.disciplinaSelecionada.nome}" /> <br/>
Carga Horária (Hrs): <h:inputText value="#{disciplinaFace.disciplinaSelecionada.cargahoraria}" /> <br/>
Ementa: <br /><h:inputTextarea rows="5" cols="40" value="#{disciplinaFace.disciplinaSelecionada.ementa}" /> <br/>
Objetivo: <br /><h:inputTextarea rows="3" cols="60" value="#{disciplinaFace.disciplinaSelecionada.objetivo}" /> <br/>
Competências / Habilidades: <br /><h:inputTextarea rows="3" cols="40" value="#{disciplinaFace.disciplinaSelecionada.comp_habilidades}" /> <br/>
Bibliografia Básica:<br /> <h:inputTextarea rows="5" cols="40" value="#{disciplinaFace.disciplinaSelecionada.bib_basica}" /> <br/>
Professor: <h:selectOneMenu value="#{disciplinaFace.disciplinaSelecionada.professor}">
<f:selectItems value="#{disciplinaFace.professoresfSystem}"/>
<f:converter converterId="conversorProfessor"/>
</h:selectOneMenu> <br/>
Turma: <h:selectOneMenu value="#{disciplinaFace.disciplinaSelecionada.turma}">
<f:selectItems value="#{disciplinaFace.turmasofSystem}"/>
<f:converter converterId="conversorTurma"/>
</h:selectOneMenu> <br/>
<h:commandButton action="listaDisciplinas" value="Cancelar"/>
<h:commandButton action="#{disciplinaFace.fimAddDisciplina}" value="Adicionar"/>
</h:form>
Método fimAddDisciplina()
public String fimAddDisciplina() {
DisciplinaDAO.addDisciplina(DisciplinaSelecionada);
cachedDisciplinas = null;
return "listaDisciplinas";
}
Método addDisciplina
public int addDisciplina(disciplina dis) {
saveOrUpdatePojo(dis);
return dis.getCod();
}
Professor Conversor
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return professorDAO.getProfessorByCod(Integer.parseInt(value));
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
getProfessorByCod
public professor getProfessorByCod(int cod) {
Session ses = getSession();
Query query = ses.createQuery("from professor pro where pro.cod = :cd");
query.setInteger("cd", cod);
professor pro = (professor) query.uniqueResult();
ses.getTransaction().commit();
ses.close();
return pro;
}
Turma Conversor
public Object getAsObject(FacesContext context, UIComponent component, String value) {
return turmaDAO.getTurmaByCod(Integer.parseInt(value));
}
public String getAsString(FacesContext context, UIComponent component, Object value) {
return value.toString();
}
getTurmaByCod
public turma getTurmaByCod(int cod) {
Session ses = getSession();
Query query = ses.createQuery("from turma tur where tur.cod = :cd");
query.setInteger("cd", cod);
turma tur = (turma) query.uniqueResult();
ses.getTransaction().commit();
ses.close();
return tur;
}
pode desconsiderar aí a msg de cima.
Agora to com o mesmo erro de alguns, toda vez que acesso uma página pede login...
valew

Por exemplo no form de salvar um produto há um selectOneMenu para o usuário mas ele não tem conversor e mesmo assim grava.
No meu código dá o seguinte erro quando tento gravar :
"Erro de conversão ao definir o valor 'User2' para 'null Converter'."
Terá que criar um conversor explicitamente :(
Atenciosamente,
Curso(s):
Formações:
Space do autor

download

7
0
