rowselectmode example editable disabledselection columns jsf-2 primefaces datatable radio-button required

jsf 2 - example - PrimeFaces DataTable con Radiobutton requerido



primefaces datatable selection (1)

Puede verificar la selección de datos en flowListener de la flowListener <p:wizard> que se activa cuando se hace clic en los botones siguiente / anterior y se agrega condicionalmente FacesMessage :

public String onFlowProcess(FlowEvent event) { String current = event.getOldStep(); String next = event.getNewStep(); boolean proceed = true; if(current.equals("first") && next.equals("second") && (selectedData == null)) { //proceed only when data was selected and user is moving to the next step FacesMessage facesMessage = new FacesMessage("You need to make a selection in a datatable to proceed!"); FacesContext.getCurrentInstance().addMessage("form:selection", facesMessage); proceed = false; } return proceed ? next : current; }

El ejemplo completo se proporciona a continuación.

La vista:

<h:form id="form"> <p:wizard widgetVar="wiz" flowListener="#{q16439053Bean.onFlowProcess}"> <p:tab id="first" title="First"> <p:message for="selection"/> <p:panel id="selection" header="Term page"> <p:dataTable id="collection" value="#{q16439053Bean.list}" var="data" rowKey="#{data.name}" selection="#{q16439053Bean.selectedData}"> <p:column selectionMode="single" style="width:2%" /> <p:column> #{data.name} </p:column> </p:dataTable> </p:panel> </p:tab> <p:tab id="second" title="Second"> Done! </p:tab> </p:wizard> </h:form>

El frijol:

@ManagedBean @ViewScoped public class Q16439053Bean implements Serializable { private List<Data> list; private Data selectedData; public List<Data> getList() { return list; } public void setList(List<Data> list) { this.list = list; } public Data getSelectedData() { return selectedData; } public void setSelectedData(Data selectedData) { this.selectedData = selectedData; } public class Data { private String name; private String value; public Data() { } public Data(String name, String value) { this.name = name; this.value = value; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } } public Q16439053Bean() { list = new ArrayList<Data>(); Data d; d = new Data("name", "value"); list.add(d); d = new Data("name1", "value1"); list.add(d); d = new Data("name2", "value2"); list.add(d); d = new Data("name3", "value3"); list.add(d); } public String onFlowProcess(FlowEvent event) { String current = event.getOldStep(); String next = event.getNewStep(); boolean proceed = true; if(current.equals("first") && next.equals("second") && (selectedData == null)) { FacesMessage facesMessage = new FacesMessage("You need to make a selection in a datatable to proceed!"); FacesContext.getCurrentInstance().addMessage("form:selection", facesMessage); proceed = false; } return proceed ? next : current; } }

Estoy utilizando PrimeFaces DataTable con Radiobuttons dentro de una sola pestaña de asistente. ¿Es posible establecer Radiobutton de alguna manera como se requiere ?

El usuario no debe ir a la siguiente pestaña del asistente hasta que elija una opción en DataTable con Radiobuttons.

¿O tienes alguna idea de cómo resolver este problema? Gracias por cualquier respuesta!

Página JSP

<p:tab id="test" title="Test"> <p:panel header="Term page"> <p:dataTable id="collection" value="#{register.dataList}" var="dl" rowKey="#{dl.c_id}" selection="#{register.selectedTerm}""> <p:column selectionMode="single" style="width:2%" /> <p:column> #{dl.c_id} </p:column> </p:dataTable> </p:panel> </p:tab>