Ajuda com DisplayTag

14 respostas
cris.t

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", "[email removido]");
		addPerson("Pessoa2", "2", "[email removido]");
		addPerson("Pessoa3", "3", "[email removido]");

	}

	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>

14 Respostas

vanderlanio

Qual seria exatamente a sua duvida ?

cris.t

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

vanderlanio

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:

cris.t

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?

abelgomes

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

people.add(addPerson("Pessoa1", "1", "[email removido]"));

//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,

cris.t

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

abelgomes

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…

cris.t

Eu usei o sequinte:

people = new ArrayList<Person>();
		
people.add(addPerson("Pessoa1", "1", "[email removido]"));
people.add(addPerson("Pessoa2", "2", "[email removido]"));
people.add(addPerson("Pessoa3", "3", "[email removido]"));

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?

abelgomes

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…

vanderlanio

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:

cris.t

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

public String execute(){
		people = new ArrayList<Person>();
		
		people.add(addPerson("Pessoa1", "1", "[email removido]"));
		people.add(addPerson("Pessoa2", "2", "[email removido]"));
		people.add(addPerson("Pessoa3", "3", "[email removido]"));
		
		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

vanderlanio

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

abelgomes

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

cris.t

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?

Criado 26 de novembro de 2008
Ultima resposta 26 de nov. de 2008
Respostas 14
Participantes 3