Datatable primefaces multselect + chackbox não preenche bean

1 resposta
C

Olá pessoal após 1 semana de tentativas resolvi postar meu problema. Fiz tudo conforme o showcase do datatable radiobutton/checkbox com column selectionMode=“multiple”, porém ao selecionar qualquer item na tabela, não consigo visualizar o(s) itens selecionados. A primeira vista o que vi é que o array que deveria receber os itens selecionados não esta recebendo, e eu não sei porque. Alguém poderia me ajudar?

//Meu xhtml
 <p:dataTable  id="tels" value="#{managedBeanSecurity.telefonesClienteDataModel}" var="tel" selection="#{managedBeanSecurity.selectedTelefones}">  
                          
                                <p:column selectionMode="multiple" />  
                                <p:column headerText="Telefones">  
                                    <h:outputText value="#{tel.telefone}"/>  
                                </p:column>  
                                <f:facet name="footer">  
                                    <p:commandButton id="multiViewButton" value="View" icon="ui-icon-search"  
                                                     update=":form_cadastro_usuario:displayMulti" oncomplete="multiCarDialog.show()"/>  
                                </f:facet>  
                            </p:dataTable>  
                            <p:dialog id="multiDialog" header="Car Detail" widgetVar="multiCarDialog"  
                                      height="300" showEffect="fade" hideEffect="explode">  
                                <h:outputText value="#{managedBeanSecurity.selectedTelefone}"/>
                                <p:dataList id="displayMulti"  
                                            value="#{managedBeanSecurity.selectedTelefones}" var="selectedTel">  
                                    Tel: #{selectedTel.telefone}  
                                </p:dataList>  

                            </p:dialog> 

//o DataModel

public class TelefonesClienteDataModel extends ListDataModel<TelefonesCliente> implements SelectableDataModel<TelefonesCliente>  {

    public TelefonesClienteDataModel() {  
    }  
  
    public TelefonesClienteDataModel(List<TelefonesCliente> data) {  
        super(data);  
    }  
      
    
    @Override
    public Object getRowKey(TelefonesCliente t) {
        return t.getIdTelefones(); 
    }

    @Override
    public TelefonesCliente getRowData(String rowKey) {
       //In a real app, a more efficient way like a query by rowKey should be implemented to deal with huge data  
          
        List<TelefonesCliente> tels = (List<TelefonesCliente>) getWrappedData();  
          
        for(TelefonesCliente tel : tels) {  
            if(tel.getIdTelefones().equals(rowKey))  
                return tel;  
        }  
          
        return null;  
    }
    
}

//Meu bean

@ManagedBean
@SessionScoped
public class ManagedBeanSecurity implements Serializable {

    private static final long serialVersionUID = 1L;
    private List<TelefonesCliente> telefones;
    private TelefonesCliente selectedTelefone;
    private TelefonesCliente[] selectedTelefones;
    private TelefonesClienteDataModel telefonesClienteDataModel;

    @PostConstruct
    private void init() {
        
        telefones = new ArrayList< TelefonesCliente>();

        getTelefones().add(new TelefonesCliente(1, "(353) 8675-6457"));
        getTelefones().add(new TelefonesCliente(2, "(353) 6775-6897"));
        getTelefones().add(new TelefonesCliente(3, "(345) 6675-6477"));
        getTelefones().add(new TelefonesCliente(4, "(353) 8675-6457"));
        getTelefones().add(new TelefonesCliente(5, "(753) 8685-6257"));
        getTelefones().add(new TelefonesCliente(6, "(353) 8678-6467"));
        getTelefones().add(new TelefonesCliente(7, "(303) 8095-877"));
        getTelefones().add(new TelefonesCliente(8, "(353) 8675-6457"));
        getTelefones().add(new TelefonesCliente(9, "(354) 3455-6457"));
        getTelefones().add(new TelefonesCliente(10, "(353) 9775-6457"));
        setTelefonesClienteDataModel(new TelefonesClienteDataModel(getTelefones()));
    }

    
    /**
     * @return the telefones
     */
    public List<TelefonesCliente> getTelefones() {
        return telefones;
    }

    /**
     * @return the selectedTelefone
     */
    public TelefonesCliente getSelectedTelefone() {
        return selectedTelefone;
    }

    /**
     * @param selectedTelefone the selectedTelefone to set
     */
    public void setSelectedTelefone(TelefonesCliente selectedTelefone) {
        this.selectedTelefone = selectedTelefone;
    }

    /**
     * @return the selectedTelefones
     */
    public TelefonesCliente[] getSelectedTelefones() {
        return selectedTelefones;
    }

    /**
     * @param selectedTelefones the selectedTelefones to set
     */
    public void setSelectedTelefones(TelefonesCliente[] selectedTelefones) {
        this.setSelectedTelefones(selectedTelefones);
    }

    /**
     * @return the telefonesClienteDataModel
     */
    public TelefonesClienteDataModel getTelefonesClienteDataModel() {
        return telefonesClienteDataModel;
    }

    /**
     * @param telefonesClienteDataModel the telefonesClienteDataModel to set
     */
    public void setTelefonesClienteDataModel(TelefonesClienteDataModel telefonesClienteDataModel) {
        this.telefonesClienteDataModel = telefonesClienteDataModel;
    }

   
}

1 Resposta

CLEYSON

Acrescentar o ID de Telefone na Tabela … ele é o index …

<p:column selectionMode="multiple" /> <p:column headerText="ID"> <h:outputText value="#{tel.IdTelefones}"/> </p:column <p:column headerText="Telefones"> <h:outputText value="#{tel.telefone}"/> </p:column>

:?: Outra Coisa … Seu Scope não deveria ser ViewScope ?

:?: getIdTelefones return String ou integer?

for(TelefonesCliente tel : tels) { if(tel.getIdTelefones().equals(rowKey)) return tel; }

:idea: Atributos em java colocar iniciar com letras minúsculas

Criado 2 de outubro de 2012
Ultima resposta 2 de out. de 2012
Respostas 1
Participantes 2