Struts2: acessar atributos de outra classe

8 respostas
M

pessoal, estou tentando listar os dados os dados de um usuario…mas não estou conseguindo listar! testei o metodo e ele funciona no console, mas não exibe na pagina jsp,tenho uma pagina home.jsp que ao clicar no link listar usuario ele exibe o nome e o cpf do usuario, mas nao exibe os dados referentes ao endereco: logradouro, bairro… alguém poderia me dá uma ajuda???

segue a classe UsuarioAction

public class UsuarioAction {
	
	ArrayList<UsuarioBean>usuarios = new ArrayList<UsuarioBean>();	
	UsuarioBean usuario = new UsuarioBean();
	Endereco endereco = new Endereco() ;
	UsuarioDao usuarioDao;
	private String saida;
	
	public UsuarioAction(){
		usuarioDao = new UsuarioDao();		
	}
	public void setUsuario(UsuarioBean usuario){
		this.usuario = usuario;
	}
	public UsuarioBean getUsuario(){
		return usuario;
	}
	
	public List<UsuarioBean> getUsuarios(){
		return usuarios;
	}
	
	public void setEndereco(Endereco endereco){
		this.endereco = endereco;
	}
	public Endereco getEndereco(){
		return endereco;
	}
	
	public String cadastrar()throws SQLException{
		try{
			 usuarioDao.cadastrar(usuario);
			saida = "sucesso";
			
		}catch(SQLException e){
			System.out.println("erro ao chamar a DAO");
			e.printStackTrace();
			saida = "falha";
		}
		return saida;
		
	}
	
	public String listaUsuarios()throws SQLException{
		try{
			usuarios = usuarioDao.getListarTodos();
			saida = "sucessoLista";
			
		}catch (SQLException e) {
			System.out.println("erro ao listar");
			e.printStackTrace();
			saida = "falha";
		}
		return saida;		
	}

a pagina que lista os usuarios:

<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>

<title>Lista de Usuarios</title>
</head>
<body>
 
<table>
	 <tr>
        <th><s:text name="Nome"/></th>
        <th><s:text name="CPF"/></th>
        <th><s:text name="Logradouro"/></th>
         <th><s:text name="Bairro"/></th>
        
        <th> </th>
    </tr>
   <s:form >
	<s:iterator value="usuarios" >
		<tr>
			<td><s:property value="nome"/></td>
			<td><s:property value="cpf"/></td>
			<td><s:property value="usuario.endereco.logradouro"/></td>
			<td><s:property value="bairro"/></td>
		</tr>
		
	</s:iterator>	
	
	</s:form>
</table>

	<center><br><a href="cadastrar_usuario.jsp" >Novo contato</a> </center>
	
	
</body>
</html>

segue a pagina home.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib prefix="s" uri = "/struts-tags"%>
<!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=ISO-8859-1">
<title>Pagina principal do sistema</title>
</head>
<body>
	olá <s:property value="login.nome"/>,<br>
	
	<B>seja bem vindo a tela de acesso.</B>
	<center><br><a href="index.jsp" >login da aplicação</a> </center>
	<center><br><a href="cadastrar_usuario.jsp" >Cadastrar usuario</a> </center>
	
	<center><br><a href="<s:url action="listaUsuarios"/>" >Listar usuario</a> </center>	
	
</body>
</html>

8 Respostas

edysnipes

Fala Marcos!

Levando em conta que o método está retornando uma lista de usuários e que o seu UsuarioBean tenha mapeado um EnderecoBean creio que o problema possa estar no iterator.

Tente isso:

<s:iterator value="usuarios" >  
         <tr>  
             <td><s:property value="nome"/></td>  
             <td><s:property value="cpf"/></td>  
             <td><s:property value="endereco.logradouro"/></td>  
             <td><s:property value="endereco.bairro"/></td>  
         </tr>             
     </s:iterator>

Falow!

M

também não listou!!! endereco.logradouro, endereco.bairro…
não estou entendendo, pois criei uma classe endereco ou se quiser uma interface, não importa, mas como fazer com que exiba os dados referentes ao endereco!!! será que vou ter que criar os atributos de endereco dentro de usuario, funcionario…!!! não estou reutilzando código!!!
alguem pode me dá uma ajuda?! vlw

edysnipes

Posta ai seu UsuarioBean/FuncionaioBean e seu EnderecoBean. Vamos ver como está o relacionamento.
Debugando você consegue verificar se o endereço é retornado na lista?

M

segue a classe UsuarioBean

public class UsuarioBean  {
	private int codigo;
	private String nome;	
	private String cpf;
	Endereco endereco = new Endereco();
	
	public UsuarioBean(){
		
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getCpf() {
		return cpf;
	}
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	public Endereco getEndereco() {
		return endereco;
	}
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	public final int getCodigo() {
		return codigo;
	}
	public final void setCodigo(int codigo) {
		this.codigo = codigo;
	}
	

}

a classe EnderecoBean

public class Endereco {
	private String logradouro;
	private int numero;
	private String bairro;
	private String cidade;
	private String cep;
	
	public Endereco(){
		
	}
	public Endereco(String logradouro, int numero,String bairro, String cidade, String cep){
		this.logradouro = logradouro;
		this.numero = numero;
		this.bairro = bairro;
		this.cidade = cidade;
		this.cep = cep;		
	}
	public String getLogradouro(){
		return logradouro;
	}
	public void setLogradouro(String logradouro){
		this.logradouro = logradouro;
	}
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}
	public int getNumero() {
		return numero;
	}
	public void setNumero(int numero) {
		this.numero = numero;
	}
	public String getCidade() {
		return cidade;
	}
	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

}
edysnipes

velho a única explicação seria o método não estar carregando as informações do endereço. Debuga a action e verifica se realmente a lista está sendo preenchida com todos os usuário com seus respectivos endereços.

no iteretor só mostra nome e cpf né então pode ser isto. Dá uma olhada aí.

M

fiz uma classe Main para testar os métodos… e o metodo listaUsurios de UsuarioAction funciona direitinho no console…exibe todos os valores no main!!
ou tem que fazer um debug para testar mesmo?! e pra debugar eh com run on server?

M

como o edysnipes disse: o único possivel problema seria não estar carregando os dados de endereço, mas fica a minha questão: porque está acontecendo isso?! alguem sabe?! flw

M

pessoal, para acessar um atributo utilizando Struts2 tem que ter os gets e sets, só que fiz o gets e sets endereco tanto na classe UsuarioBean quanto na classe UsuarioAction! no entanto nao consigo acessar os atributos do endereco! vou postar o codigo na ordem para que fique melhor acompanhar! to precisando de ajuda!!!

segue o codigo da classe Endereco:

public class Endereco {
        private String logradouro;
        private int numero;
        private String bairro;
        private String cidade;
        private String cep;

        public Endereco(){

        }
        public Endereco(String logradouro, int numero,String bairro, String
cidade, String cep){
                this.logradouro = logradouro;
                this.numero = numero;
                this.bairro = bairro;
                this.cidade = cidade;
                this.cep = cep;
        }
        public String getLogradouro(){
                return logradouro;
        }
        public void setLogradouro(String logradouro){
                this.logradouro = logradouro;
        }
        public String getBairro() {
                return bairro;
        }
        public void setBairro(String bairro) {
                this.bairro = bairro;
        }
        public String getCep() {
                return cep;
        }
        public void setCep(String cep) {
                this.cep = cep;
        }
        public int getNumero() {
                return numero;
        }
        public void setNumero(int numero) {
                this.numero = numero;
        }
        public String getCidade() {
                return cidade;
        }
        public void setCidade(String cidade) {
                this.cidade = cidade;
        }

}

segue a classe UsuarioBean:

public class UsuarioBean  {
        private int codigo;
        private String nome;
        private String cpf;
        Endereco endereco = new Endereco();

        public UsuarioBean(){

        }
        public String getNome() {
                return nome;
        }
        public void setNome(String nome) {
                this.nome = nome;
        }
        public String getCpf() {
                return cpf;
        }
        public void setCpf(String cpf) {
                this.cpf = cpf;
        }
        public Endereco getEndereco() {
                return endereco;
        }
        public void setEndereco(Endereco endereco) {
                this.endereco = endereco;
        }
        public final int getCodigo() {
                return codigo;
        }
        public final void setCodigo(int codigo) {
                this.codigo = codigo;
        }
}

segue a classe UsuarioAction:

public class UsuarioAction {

        ArrayList<UsuarioBean>usuarios = new ArrayList<UsuarioBean>();
        UsuarioBean usuario = new UsuarioBean();
        Endereco endereco = new Endereco() ;
        UsuarioDao usuarioDao;
        private String saida;

        public UsuarioAction(){
                usuarioDao = new UsuarioDao();
        }
        public void setUsuario(UsuarioBean usuario){
                this.usuario = usuario;
        }
        public UsuarioBean getUsuario(){
                return usuario;
        }

        public List<UsuarioBean> getUsuarios(){
                return usuarios;
        }

        public void setEndereco(Endereco endereco){
                this.endereco = endereco;
        }
        public Endereco getEndereco(){
                return endereco;
        }

        public String cadastrar()throws SQLException{
                try{
                         usuarioDao.cadastrar(usuario);
                        saida = "sucesso";

                }catch(SQLException e){
                        System.out.println("erro ao chamar a DAO");
                        e.printStackTrace();
                        saida = "falha";
                }
                return saida;

        }

        public String listaUsuarios()throws SQLException{
                try{
                        usuarios = usuarioDao.getListarTodos();
                        saida = "sucessoLista";

                }catch (SQLException e) {
                        System.out.println("erro ao listar");
                        e.printStackTrace();
                        saida = "falha";
                }
                return saida;
        }

a Pagina listar_usuario.jsp

<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>

<title>Lista de Usuarios</title>
</head>
<body>

<table>
         <tr>
        <th><s:text name="Nome"/></th>
        <th><s:text name="CPF"/></th>
        <th><s:text name="Logradouro"/></th>
         <th><s:text name="Bairro"/></th>

        <th> </th>
    </tr>
   <s:form >
        <s:iterator value="usuarios" >
                <tr>
                        <td><s:property value="nome"/></td>
                        <td><s:property value="cpf"/></td>
                        <td><s:property value="usuario.endereco.logradouro"/></td>
                        <td><s:property value="usuario.endereco.bairro"/></td>
OBS.: PQ NAO ESTOU CONSIGO ACESSAR OS ATRIBUTOS DO ENDERECO?!  QUE
UTILIZO A MESMA COISA PARA CADASTRAR E É REALIZADO COM SUCESSO!!!
ALGUEM PODE ME DIZER O QUE ESTÁ ERRADO. OBRIGADO.
                </tr>

        </s:iterator>

        </s:form>
</table>

        <center><br><a href="cadastrar_usuario.jsp" >Novo contato</a> </
center>

</body>
</html>
Criado 18 de agosto de 2009
Ultima resposta 20 de ago. de 2009
Respostas 8
Participantes 2