JavaServer Faces <h:dataTable>

5 respostas
edvaldo.santiago

Bom dia pessoal…

Estou usando o JSF pela primeira vez e estou tentando fazer uma lista usando o <h:dataTable> mais ele tá me explodindo o seguinte erro.

A versão do jsf é 1.1

Component javax.faces.component.UIViewRoot@1f5b38e not expected type. Expected: UIData. Perhaps you’re missing a tag?

Alguém já passou por isso?

Estou precisando de ajuda…

Desde já agradeço atenção …

Valeu Pessoal do GUJ. :smiley:

5 Respostas

javaBeats

Sem ver seu código, fica difícil determinar com certeza qual seja o problema. Mas me parece que você está usando um tipo de retorno ilegal para o atributo ‘value’ da sua h:dataTable.

O que retorna a expressão do seu atributo “value”? Precisa ser a chamada de um método (normalmente get()) que retorne uma List de objetos que queria renderizar. Existem outros retornos aceitáveis, como Map eu acho, e talvez vetores (não tenho certeza agora, de cabeça). Mas Set e derivados não servem.

Rodrigo

edvaldo.santiago

Bom estou passando o seguinte:

private List listas;

public List getListas() {

return listas;

}
public void setListas(List listas) {

this.listas = listas;

}
public String listaUser()throws SQLException {

String result_lista = FALHA_LISTA;

try {

stm = getConn().createStatement();

rs = stm.executeQuery("SELECT * FROM pessoa ");	

listas = new ArrayList();

while (rs.next()) {

AgendaDB agenda = new AgendaDB();

agenda.nome = rs.getString(1);

agenda.endereco = rs.getString(2);

agenda.cidade = rs.getString(3);

agenda.telefone = rs.getString(4);

listas.add(agenda);

}

result_lista = SUCESSO_LISTA;

} catch (SQLException e) {			

System.err.println("Erro: " + e);

}

rs.close();

stm.close();

return result_lista;		

}

Agora a página:

<h:dataTable id=“itens” value="#{agenda.listas}" var=“item”>

<h:column>

<f:facet name=“header”>

<h:outputText value=“Nome” />

</f:facet>

<h:outputText value="#{item.nome}" />

</h:column>

</h:dataTable>

Valeu pela ajuda…

javaBeats

Esse é todo o código da página? Se sim, está faltando colocar isso dentro de <f:view> … </f:view>.

Se não for, e você só postou a parte relevante, então AgendaDB tem que ter um método get() e set() para cada uma de suas propriedades - que devem ser de acesso privado. Em outras palavras, ela tem de ser um JavaBean. Embora não seja essa a razão do erro, creio eu.

Putz, eu passei por isso faz pouco tempo, mas eu não consigo lembrar o que era… :stuck_out_tongue: Como vc chama esta action, listaUsers() …?

edvaldo.santiago

Cara valeu…
Muito obrigado pela atenção … agora funcionou…

Valeu.

kurama

Olá, eu estou tendo um problema parecido…

A codificação do meu Managed Bean está da seguinte forma:

package logica;

import java.util.ArrayList;
import dominio.Idiomas;
import persistencia.*;

public class IdiomaBean {
	private ArrayList idiomas;
	
	public IdiomaBean(){		
	}
	
	public ArrayList getIdiomas() {
		return idiomas;
	}

	public void setIdiomas(ArrayList idiomas) {				
		this.idiomas = idiomas;
	}	
	
	public String listaIdiomas() {
		IdiomasDAO idioma = new IdiomasDAOImpl();
		setIdiomas((ArrayList) idioma.getAll());
		return null;
	}	
}

E a codificação da minha página (parte relevante) está da seguinte forma:

&lt;h:dataTable value="#{idiomaBean.idiomas}" var="item" id="tabela"
					rowClasses="list-row-even, list-row-odd" border="1" styleClass=""
					headerClass="list-header" style="" bgcolor="cyan"&gt;
					&lt;h:column&gt;
						&lt;f:facet name="header"&gt;
							&lt;h:outputText value="Idioma" /&gt;
						&lt;/f:facet&gt;			
						&lt;h:outputText value="#{item.idioma}" /&gt;
					&lt;/h:column&gt;
				&lt;/h:dataTable&gt;

O que está acontecendo eh que não está sendo listado os idiomas… não ocorre erro mas simplesmente nao lista. Minha é duvida é a seguinte, quando eu atribuo h:dataTable value="#{idiomaBean.idiomas}" a função listaIdiomas é chamado? Porque eu fiz a mesma coisa só que colocando essa função (listaIdiomas) dentro do construtor, ai funcionou… Mas ja vi exemplos em que é usado dessa forma que apresentei e funciona.
Bom espero que tenham entendido =)

Criado 18 de julho de 2006
Ultima resposta 19 de jul. de 2006
Respostas 5
Participantes 3