Depois de vermos sobre menus do PrimeFaces, nessa postagem vamos ver alguns outros componentes. Vamos precisar de algumas umas imagens e algumas bibliotecas extras, baixe por aqui.Estrutura do projetoCaso nao saiba como montar a estrutura do projeto veja aqui.Depois de pronto o projeto fica com essa estrutura:O primeiro componente que veremos hoje e o dataExporter que serve para exportar os dados para arquivos PDF, XLS, XML ou CSV de uma determinada dataTable, entao para isso eu preciso de uma dataTable:Codigo-fonte:Para este exemplo vamos precisar de uma classe Carro (pojo), entao dentro de pacote de codigos fonte crie um novo pacote com o nome de model, e dentro dele crie uma nova classe Java com o nome de Carro:public class Carro { private String marca; private int ano; private String placa; private String cor; private String modelo; public Carro(String marca, int ano, String placa, String cor, String modelo) { this.marca = marca; this.ano = ano; this.placa = placa; this.cor = cor; this.modelo = modelo; } //GETTERS e SETTERS}Agora vamos criar o nosso bean que vai dar suporte a nossa dataTable, para isso crie um pacote com o nome de controle, dentro desse pacote crie uma nova classe Java com o nome de CarroBean:@Named@RequestScopedpublic class CarroBean { private List<Carro> carros; public CarroBean() { listarCarros(); } private void listarCarros() { carros = new ArrayList<Carro>(); carros.add(new Carro("Fiat", 2011, "DFV 3455", "Verde", "Novo Uno")); carros.add(new Carro("Toyota", 2009, "ADV 3245", "Prata", "Prado")); carros.add(new Carro("Volks", 2010, "AAC 2351", "Vermelho", "Gol")); carros.add(new Carro("Volks", 2011, "EGF 1245", "Preto", "Cross Fox")); } //Gerar GET e SET}Bom nem tem o que explicar o codigo acima... Para este exemplo vamos precisar das imagens (do link que disponibilizei la no inicio), por enquanto so irei precisar de: xsl.png e pdf.png, dentro de paginas web, crie um novo diretorio com o nome de imagens, e coloque as imagens dentro dela. Agora vamos para a pagina index:<h:form> <p:dataTable id="tabelaCarros" value="#{carroBean.carros}" var="c"> <p:column> <f:facet name="header">Marca</f:facet> <h:outputText value="#{c.marca}" /> </p:column> <p:column> <f:facet name="header">Modelo</f:facet> <h:outputText value="#{c.modelo}" /> </p:column> <p:column> <f:facet name="header">Ano</f:facet> <h:outputText value="#{c.ano}" /> </p:column> <p:column> <f:facet name="header">Cor</f:facet> <h:outputText value="#{c.cor}" /> </p:column> <p:column> <f:facet name="header">Placa</f:facet> <h:outputText value="#{c.placa}" /> </p:column> </p:dataTable> <h:commandLink> <p:graphicImage value="/imagens/xls.png" /> <p:dataExporter type="xls" target="tabelaCarros" fileName="carros" /> </h:commandLink> <h:commandLink> <p:graphicImage value="/imagens/pdf.png" /> <p:dataExporter type="pdf" target="tabelaCarros" fileName="carros"/> </h:commandLink></h:form>No codigo acima eu tenho uma dataTable normal (vista em postagens anteriores) e logo abaixo dela eu tenho os dataExporter, o detalhe mais importante e quanto a propriedade target, veja que ela corresponde ao id da tabela.Nosso segundo componente e o pickList:Vamos direto ao codigo, entao dentro do pacote controle (criado anteriormente) vamos criar uma classe com o nome de PicklistBean:@Named@RequestScopedpublic class PicklistBean { private DualListModel<String> cores; public PicklistBean() { listarCores(); } private void listarCores() { List<String> lista = new ArrayList<String>(); List<String> selecionados = new ArrayList<String>(); lista.add("Azul"); lista.add("Amarelo"); lista.add("Vermelho"); lista.add("Verde"); lista.add("Roxo"); cores = new DualListModel<String>(lista, selecionados); } public void mostrarCoresSelecionadas() { for (String cor : cores.getTarget()) { System.out.println("Esta cor e: " + cor); } } //Gerar GET e SET}Veja que usamos um DualListModel (do proprio PrimeFaces), para inicializar ele eu preciso informar duas listas, uma e dos os objetos a serem selecionados