Autor |
Mensagem |
|
Pedro.. enviei para pef.goncalves@gmail.com
Valeu
|
 |
|
Pessoal... estou com um probleminha.
Quero fazer um master-detalhe entre Pais e estados
Seguem os códigos:
Code:
Pais.java
package br.com.webhotel.bean;
import java.util.Collection;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import br.com.linkcom.neo.bean.annotation.DescriptionProperty;
import br.com.linkcom.neo.validation.annotation.MaxLength;
@Entity
@SequenceGenerator(name = "gen_pais", sequenceName = "gen_pais")
public class Pais{
protected Integer idPais;
protected String descricao;
protected List<Estado> listaEstados;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "gen_pais")
public Integer getIdPais() {
return idPais;
}
@MaxLength(20)
@DescriptionProperty
public String getDescricao() {
return descricao;
}
@OneToMany(cascade = CascadeType.ALL, mappedBy = "pais")
public Collection<Estado> getListaEstados() {
return listaEstados;
}
public void setIdPais(Integer idPais) {
this.idPais = idPais;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public void setListaEstados(List<Estado> listaEstados) {
this.listaEstados = listaEstados;
}
}
Estado.java
package br.com.webhotel.bean;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import br.com.linkcom.neo.bean.annotation.DescriptionProperty;
import br.com.linkcom.neo.validation.annotation.MaxLength;
@Entity
@SequenceGenerator(name = "gen_estado", sequenceName = "gen_estado")
public class Estado {
protected Integer idEstado;
protected String descricao;
protected Pais pais;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "gen_estado")
public Integer getIdEstado() {
return idEstado;
}
@MaxLength(20)
@DescriptionProperty
public String getDescricao() {
return descricao;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "idPais")
public Pais getPais() {
return pais;
}
public void setIdEstado(Integer idEstado) {
this.idEstado = idEstado;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public void setPais(Pais pais) {
this.pais = pais;
}
}
PaisDAO.java
package br.com.webhotel.dao;
import br.com.linkcom.neo.core.standard.Neo;
import br.com.linkcom.neo.persistence.GenericDAO;
import br.com.linkcom.neo.persistence.QueryBuilder;
import br.com.linkcom.neo.persistence.SaveOrUpdateStrategy;
import br.com.webhotel.bean.Pais;
public class PaisDAO extends GenericDAO<Pais> {
/* singleton */
/*private static PaisDAO instance;
public static PaisDAO getInstance() {
if(instance == null){
instance = Neo.getObject(PaisDAO.class);
}
return instance;
}*/
@Override
public void updateEntradaQuery(QueryBuilder<Pais> query) {
query.fetchCollection("listaEstados");
}
@Override
public void updateSaveOrUpdate(SaveOrUpdateStrategy save) {
save.saveOrUpdateManagedNormal("listaEstados");
}
}
EstadoDAO.java
package br.com.webhotel.dao;
import br.com.linkcom.neo.core.standard.Neo;
import br.com.linkcom.neo.persistence.GenericDAO;
import br.com.webhotel.bean.Estado;
public class EstadoDAO extends GenericDAO<Estado> {
/* singleton */
/*private static EstadoDAO instance;
public static EstadoDAO getInstance() {
if(instance == null){
instance = Neo.getObject(EstadoDAO.class);
}
return instance;
}
*/
}
paisEntrada.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="n" uri="neo"%>
<%@ taglib prefix="t" uri="template"%>
<t:entrada>
<t:janelaEntrada>
<t:tabelaEntrada>
<t:property name="idPais"/>
<t:property name="descricao"/>
</t:tabelaEntrada>
<t:detalhe name="listaEstados">
<t:property name="idEstado"/>
<t:property name="descricao"/>
</t:detalhe>
</t:janelaEntrada>
</t:entrada>
paisListagem.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="n" uri="neo"%>
<%@ taglib prefix="t" uri="template"%>
<t:listagem>
<t:tabelaResultados>
<n:column>
<t:property name="idPais"/>
<t:property name="descricao"/>
<n:dataGrid property="listaEstados">
<t:property name="idEstado"/>
<t:property name="descricao"/>
</n:dataGrid>
</n:column>
</t:tabelaResultados>
</t:listagem>
Quando salvo o arquivo que ele vai listar aparece:
org.springframework.beans.NullValueInNestedPathException: Invalid property 'listaEstados[0]' of bean class [br.com.webhotel.bean.Pais]: Cannot access indexed value of property referenced in indexed property path 'listaEstados[0]': returned null
br.com.linkcom.neo.controller.ExtendedBeanWrapper.getPropertyValue(ExtendedBeanWrapper.java:737)
E quando entro na tela que ele vai listar os dados tbm aparece:
SEVERE: failed to lazily initialize a collection of role: br.com.webhotel.bean.Pais.listaEstados, no session or session was closed
org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.webhotel.bean.Pais.listaEstados, no session or session was closed
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:358)
at org.hibernate.collection.AbstractPersistentCollection.throwLazyInitializationExceptionIfNotConnected(AbstractPersistentCollection.java:350)
Alguém sabe onde está o erro?
|
 |
|
Blz Pedro.....
|
 |
|
Pedro..... criei outro projeto identico ao que estava com erro e funcionou,
funcionou mas fiquei sem saber qual o enigma.
Meu filtro está
package filtro;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import br.com.linkcom.neo.core.standard.Neo;
public class AutentificacaoFiltro implements Filter{
String loginPage = "/modulo/login";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
if(Neo.getUser() == null){
request.getRequestDispatcher(loginPage)
.forward(request, response);
} else {
chain.doFilter(request, response);
}
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
|
 |
|
Pessoal.... consegui identificar uma coisa
quando adiciono
<!-- Filtro de autenticação. Verifica se o usuário está logado -->
<filter>
<filter-name>authenticationFilter</filter-name>
<filter-class>filtro.AutentificacaoFiltro</filter-class>
</filter>
<!-- Esse filtro irá barrar todo acesso anonimo à /secured/* -->
<!-- Se desejar barrar acesso anonimo à outras URLs duplique o filter-mapping e altere a url-pattern -->
<filter-mapping>
<filter-name>authenticationFilter</filter-name>
<url-pattern>/secured/*</url-pattern>
</filter-mapping>
no web.xml é que gera o 404.....
Como fazer pra resolver?
|
 |
|
Minhas libs são todas do projeto testecrud que baixei.
Eu estava com um projeto teste com uma crud de usuário funcionando normalmente, então fui testar o Login. Após mudar o web.xml e discribuir
os jsps na estrutura de pacote secured e criar as classes de segurança modulo como o exemplo fala, o projeto deixou de funcionar e não está achando o caminha da action, no caso fica dando erro 404...
|
 |
|
Pedro, valeu a atenção..
Meu web.xml....
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns si="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- Listener que inicializa a aplicação -->
<listener>
<listener-class>br.com.linkcom.neo.core.web.init.ContextLoaderListener</listener-class>
</listener>
<!-- Filtro para criar o contexto do NEO -->
<filter>
<filter-name>neoFilter</filter-name>
<filter-class>br.com.linkcom.neo.core.web.NeoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>neoFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Filtro de autenticação. Verifica se o usuário está logado -->
<filter>
<filter-name>authenticationFilter</filter-name>
<filter-class>filtro.AutentificacaoFiltro</filter-class>
</filter>
<!-- Esse filtro irá barrar todo acesso anonimo à /secured/* -->
<!-- Se desejar barrar acesso anonimo à outras URLs duplique o filter-mapping e altere a url-pattern -->
<filter-mapping>
<filter-name>authenticationFilter</filter-name>
<url-pattern>/secured/*</url-pattern>
</filter-mapping>
<!-- Servlet necessário para Ajax -->
<servlet>
<servlet-name>ajaxServlet</servlet-name>
<servlet-class>br.com.linkcom.neo.view.AjaxServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ajaxServlet</servlet-name>
<url-pattern>/ajax/*</url-pattern>
</servlet-mapping>
<!-- Servlet necessário do NEO, provê JS e CSS -->
<servlet>
<servlet-name>resourceServlet</servlet-name>
<servlet-class>br.com.linkcom.neo.view.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>resourceServlet</servlet-name>
<url-pattern>/resource/*</url-pattern>
</servlet-mapping>
<!-- Servlet necessário para os inputs select-one-path e select-one-button -->
<servlet>
<servlet-name>selecionarCadastrarServlet</servlet-name>
<servlet-class>br.com.linkcom.neo.view.SelecionarCadastrarServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>selecionarCadastrarServlet</servlet-name>
<url-pattern>/SELECIONARCADASTRAR/*</url-pattern>
</servlet-mapping>
<!-- Módulo da aplicação -->
<servlet>
<servlet-name>modulo</servlet-name>
<servlet-class>br.com.linkcom.neo.controller.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>modulo</servlet-name>
<url-pattern>/modulo/*</url-pattern>
</servlet-mapping>
<!-- Módulo seguro da aplicação, só é possÃvel acessar esse módulo se o usuário tiver logado no sistema -->
<servlet>
<servlet-name>secured</servlet-name>
<servlet-class>br.com.linkcom.neo.controller.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>secured</servlet-name>
<url-pattern>/secured/*</url-pattern>
</servlet-mapping>
</web-app>
|
 |
|
Eu baixei o projeto app-demo, gerei o banco e quando vou entrar no
http://localhost:8080/WebMidia/modulo/login da o 404...
Alguém pode falar onde pode ser o erro?
|
 |
|
O famoso erro HTTP Status 404....
O fato de perguntar se o tutorial ta completo, é pq vi que escreveram
que está faltando uma parte dele...
|
 |
|
Gostaria de saber se esse existe um tutorial COMPLETO explicando como montar a parte de autenticação e autorização no NEO.
Usei o do http://www.neoframework.org/siteneo/tutorial/ver/25/Autenticacao_e_Autorizacao
mas não tive sucesso...
|
 |
|