У меня есть следующие радиокнопок выбираемые DataTable:Радио кнопка выбора с primefaces
<h:form>
<p:dataTable value="#{gerarDocumentoBacking.reclamantes}"
selection="#{gerarDocumentoBacking.reclamante}" var="re" rowKey="#{re.id}">
<p:column headerText="Id">
<h:outputText value="#{re.id}"/>
</p:column>
<p:column headerText="Relamantes">
<h:outputText value="#{re.nome}"/>
</p:column>
<p:column selectionMode="single"/>
</p:dataTable>
<p:commandButton value="Gerar" action="#{gerarDocumentoBacking.gerar}"/>
</h:form>
Он отображает все строки и кнопки радио, как и ожидалось. Однако он не устанавливает переменную reclamante
, как указано в атрибуте selection=
.
Метод setReclamante
доступен и общественности:
@Named
@ViewScoped
public class GerarDocumentoBacking implements Serializable {
private static final long serialVersionUID = 1L;
private List<Reclamante> reclamantes;
private Reclamante reclamante;
@EJB
private ReclamanteService reclamanteService;
@PostConstruct
public void init() {
reclamantes = reclamanteService.listar();
}
public String gerar() {
System.out.println(reclamante.getNome());
return null;
}
public Reclamante getReclamante() {
return reclamante;
}
public void setReclamante(Reclamante reclamante) {
this.reclamante = reclamante;
}
...
Используя некоторые IDE отладки, я мог видеть, метод setReclamante
вызывается с нулевым значением, так что мой gerar
метод бросает NullPointerException на линии System.out.println(reclamante.getNome());
. У моего datatable есть атрибут rowKey, и я знаю, что он действителен, потому что он отображается в datatable.
Мне нужна командная кнопка за пределами datatable, потому что я намерен использовать другие типы данных внутри этого h:form
.