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;
}
}