Ajuda com DisplayTag

Estou tentando fazer um exemplo com o displayTag, porém não estou conseguindo entender exatamente como ele funciona, se alguem puder me ajudar ficarei mto grata.

Classe Person :

public class Person {
	public String nome;
	public String email;
	public String Id;

	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getId() {
		return Id;
	}
	public void setId(String id) {
		Id = id;
	}

Classe TesteAction:

public class TesteAction extends HttpServlet {
	
	private ArrayList<Person> people;
	
	public TesteAction() {
		people = new ArrayList<Person>();
		
		addPerson("Pessoa1", "1", "pessoa1@kiq.com.br");
		addPerson("Pessoa2", "2", "pessoa2@kiq.com.br");
		addPerson("Pessoa3", "3", "pessoa3@kiq.com.br");

	}

	private void addPerson(String nome, String id, String email) {
		Person person = new Person();
		person.setNome(nome);
		person.setId(id);
		person.setEmail(email);
	}
	
	public ArrayList<Person> getPeople(){
		return people;
	}

index.jsp:



<%@ taglib prefix="display" uri="http://displaytag.sf.net" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

<display:table name="people" requestURI="teste.TesteAction">
  <display:column property="id" title="ID" />
  <display:column property="nome" />
  <display:column property="email" />
</display:table>

</body>
</html>

Qual seria exatamente a sua duvida ?

como eu passo a lista de pessoas “people” para o displayTag, como eu identico a classe que ele vai pegar essa lista?

a tag name e a lista q será interada , ou seja terá no seu request um atributo (Collection ) exatamente com esse nome, algo como :

request.setAttribute("people", minhaListPessoas);

esse atributo estará na sua Servlet ou Action…

como abaixo ;

private ArrayList<Person> people; 

que será referenciada no resquestURI

requestURI="teste.TesteAction"

para maiores informações : http://displaytag.sourceforge.net/ e http://hotwork.sourceforge.net/hotwork/manual/displaytag/displaytag-user-guide.html ( esse em português )
:lol:

Obrigada vanderlanio,
Mais uma dúvida

request.setAttribute("people", minhaListPessoas);  

Este request ele é do tipo HttpServletRequest que é uma interface neh? Como faço pra usa-lo?

em nehhum momento vc esta preenchendo a Lista…vc deve fazer assim:

people.add(addPerson("Pessoa1", "1", "pessoa1@kiq.com.br"));

//sendo q o seu metodo addPerson fica ssim

private Person addPerson(String nome, String id, String email) {  
Person person = new Person();  
person.setNome(nome);  
person.setId(id);  
person.setEmail(email);  
return person;
} 

uma vez feito isso vc tem que adicionar essa sua lista no request, para assim a pagina poder V.

nao precisa do getPeolple() substitua por

request.setAtributte("pessoas",people);

e la na jsp vc faz assim:

 <%@ taglib prefix="display" uri="http://displaytag.sf.net" %>  
 <html>  
  <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
    <title>Insert title here</title>  
    </head>  
   <body>  
      
    <display:table name="pessoas" requestURI="">  
     <display:column property="id" title="ID" />  
     <display:column property="nome" />  
     <display:column property="email" />  
 </display:table>  
   
   </body>  
   </html>  

no atributo requestURI vc coloca o seu actionform que foi declarado no StrutsConfig se for struts heheh senao deixa em branco e testa :wink:

pronto, aparentemente ta tudo ok…nao testei aqui…V se pega ai qualquer coisa posta ai denovo,

Valew abelgomes!!! Eu estou usando Strtus 2,
mais uma pergunta como eu faço pra usar esse request?

entao…sua action tem o metodo excute ou outro metodo que vc declarou…esse metodo recebe como parametro um resquest, response, mapping, form, etc… entao é esse request que vc usa…

Eu usei o sequinte:

people = new ArrayList<Person>();
		
people.add(addPerson("Pessoa1", "1", "pessoa1@kiq.com.br"));
people.add(addPerson("Pessoa2", "2", "pessoa2@kiq.com.br"));
people.add(addPerson("Pessoa3", "3", "pessoa3@kiq.com.br"));

HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);   
 request.setAttribute("people", people);   

No meu xtrtus.xml eu mapiei esta classe assim:

	  
 <action name="TesteAciton" class="com.kiq.kite.process.actions.TesteAction" >
	<result name="input">index.jsp</result>
</action>

o jsp:

<display:table name="people" requestURI="TesteAciton.action">
  <display:column property="id" title="ID" />
  <display:column property="nome" />
  <display:column property="email" />
</display:table>

Porém a tabela não está aparecendo, ao invés disso aparece a seguinte mensagem Nothing found to display.

Você imagina o que póde ser?

deixa seu requestURI em branco…

isso aparece pq nao tem nada na lista…:wink:

qual o nome do seuy metodo?

faz assim…

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)

e ai vc usa esse request…

se o nome do seu metodo nao for erxceute, coloca o nome dele…

Se o metodo addPerson q vc esta usando for o que vc posto acima a lista vai esta nula mesmo rs rs rs o metodo retorna void rs
Seria entao

  private Person addPerson(String nome, String id, String email) {   
        Person person = new Person();   
        person.setNome(nome);   
        person.setId(id);   
        person.setEmail(email);   
        return person;
    } 

fora isso verifique se o get e set do Objeto people foi declarado corretamente, sendo assim vc nem precisa usar o resquet
o struts 2 já faz isso pra te :wink:

Eu já corrigi isto, agora ele esta retornando um Person

	public String execute(){
		people = new ArrayList<Person>();
		
		people.add(addPerson("Pessoa1", "1", "pessoa1@kiq.com.br"));
		people.add(addPerson("Pessoa2", "2", "pessoa2@kiq.com.br"));
		people.add(addPerson("Pessoa3", "3", "pessoa3@kiq.com.br"));
		
		return "success";
	}

	private Person addPerson(String nome, String id, String email) {
		Person person = new Person();
		person.setNome(nome);
		person.setId(id);
		person.setEmail(email);
		
		return person;
	}

Estes são meus get e set, mas mesmo assim ainda continua dando a mesma mensagem

public ArrayList<Person> getPeople(){
		return people;
	}	
	
	public void setPeople(ArrayList<Person> people){
		this.people = people;
	}

Eu não consegui encontrar essa classe ActionForward no struts 2, a minha classe extende de ActionSuport

Essa classe não existe no struts 2 ( struts 2 foi totalmente reformulado ele tah mais para webwork do que pra struts 1 rs )
Pelo que vi esta tudo correto, faça um debug e verifique se seus atributos estao sendo mesmo carregados !
teoricamente esta tudo certo !

PS:: Verifique se as configurações do struts estão corretas :wink: algo como os interceptors

vc usa struts2 foi mal gata…pensei que usava o 1x…

Eu mapiei a minha classe desta maneira no strtus.xml

<action name="TesteAction" class="com.kiq.kite.process.actions.TesteAction" >
	<result name="success">index.jsp</result>
 </action>

e estou chamando ela no requestURI desta maneira:

<display:table name="people" requestURI="TesteAction.action">
  <display:column property="id" title="ID" />
  <display:column property="nome" />
  <display:column property="email" />
</display:table>

está correto isto?