DataTable do JSF - como usar?

:scrambleup: Estou começando agora a usar [u][i]Java Server Faces[/u][/i] e preciso usar uma DataTable. Problema: nunca usei e não consegui achar nenhum tutorial que me explicasse passo-a-passo (como se deve fazer com um iniciante no assunto) como criar minha primeira DataTable.

if((me explicar como usar) | (me indicar um tutorial bom) | (me mandar alguns exemplos)){ System.out.println("Muito obrigado!"); } else{ System.out.println("Obrigado assim mesmo!"); }

Esse ajuda? Tem sobre datatable lá em baixo (embaixo?).

http://www.exadel.com/tutorial/jsf/jsftags-guide.html

Seguinte, o básico da dataTable.

Tag <h:dataTable>
id como qualquer outra tag html.
value propriedade do seu backing bean que retorne uma lista
var nome pela qual você vai se referenciar aos itens da lista

Cada elemento <h:column > representa a estrutura de uma coluna da sua tabela.
Neste exemplo vamos usar a seguinte estrututa:

Uma tabela que vai mostrar uma lista de carros: Marca - Nome - Ano

<h:dataTable id=“items”
value="#{SeuBean.carros}"
var=“item”>
<h:column >
<f:facet name=“header”>
<h:outputText value=“Marca” />
</f:facet>
<h:outputText value="#{item.marca}"/>
</h:column>
<h:column>
<f:facet name=“header”>
<h:outputText value=“Nome”/>
</f:facet>
<h:outputText value="#{item.nome}"/>
</h:column>
<h:column>
<f:facet name=“header”>
<h:outputText value=“Ano”/>
</f:facet>
<h:outputText value="#{item.ano}"/>
</h:column>
</h:dataTable>

:scrambleup: Valeu, señores, achei o caminho (acho)…

Ola boa tarde, Aproveitando esse forun aberto q trata desse assunto, estou tentando utilizar dataTable na minha aplicação, porem estao ocorrendo erros
codigo dataTable

  <h:dataTable id="items" value="#{cadastroBairros.bairros}" 
   var="item"> 
	<h:column > 
	      <f:facet name="header"> 
		<h:outputText value="Codigo" /> 
	      </f:facet> 
		<h:outputText value="#{item.NUMG_Bairro}"/> 
	</h:column> 
	<h:column> 
	      <f:facet name="header"> 
		<h:outputText value="Bairro"/> 
	      </f:facet> 
		<h:outputText value="#{item.DESC_Bairro}"/> 
	</h:column> 
</h:dataTable> 

erro página:

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Expression: '#{cadastroBairros.bairros}'
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:125)


root cause 

javax.faces.FacesException: Expression: '#{cadastroBairros.bairros}'
	org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:411)
	org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:280)
	org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:300)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:110)

Pmcn,
Acho que o problema está no tipo da propriedade do seu BEAN. (<h:dataTable id=“items” value="#{cadastroBairros.bairros}" ) Qual o tipo da propriedade “bairros”?
>

ou não tá ok no faces-config…

duvidazinha relativa…
como faz pra alinhar as colunas???

Como o Flin esplicou,

o backing bean deve retornar uma Lista, pode ser uma java.util.List<E> ou somente do tipo javax.faces.model.DataModel ??

Em testes ambos tiveram sucesso, mas gostaria de entender a diferença entre eles e quando os usar como o model para o DataTable.

E caso eu queira colocar uma ação de excluir e editar pra cada linha da tabela?
Alguém poderia me passar um exemplo? (É com action né? Eu não conheço isso, se puder por favor explicar como faz o código no bean também)

[quote]E caso eu queira colocar uma ação de excluir e editar pra cada linha da tabela?
Alguém poderia me passar um exemplo? (É com action né? Eu não conheço isso, se puder por favor explicar como faz o código no bean também)[/quote]

editado… acho que consegui

Tenho a mesma dúvida do colega acima, no meu caso tenho uma dataTable que exibe algumas informações sobre pagamentos que tenho cadastrado no banco, ao clicar no botão, gostaria de atualizar esses valores no banco. Como eu poderia pegar esses dados no meu backing bean?

<h:form>		
	<h:dataTable value="#{paymentMethod.paymentMethodList}" var="payment">
		<h:inputHidden value="#{payment.id}" />
		<h:column headerClass="helpHed" id="column1">
			<f:facet name="header">
				<h:outputText value="Tipo de pagamento"></h:outputText>
			</f:facet>
			<h:outputText value="#{payment.paymentType}"></h:outputText>				
		</h:column>
		<h:column id="column2">
			<f:facet name="header">
				<h:outputText value="Valor mínimo"></h:outputText>
			</f:facet>
			R$ <h:inputText value="#{payment.minValue}" />
		</h:column>
		<h:column id="column3">
			<f:facet name="header">
				<h:outputText value="Ativar" />
			</f:facet>
			<h:commandButton action="#{paymentMethod.activePayment}" value="Ativar"></h:commandButton>
		</h:column>
	</h:dataTable>
</h:form>

Alterei essa parte:
<h:commandButton action="#{paymentMethod.activePayment}" value=“Ativar”></h:commandButton>

para:
<h:commandButton action="#{payment.activePayment}" value=“Ativar”></h:commandButton>

Assim acho que ele vai pegar o método daquela linha do bean