2013-05-08 79 views
4

我在一個嚮導選項卡內使用PrimeFaces DataTable和Radiobuttons。有可能以某種方式設置需要的RadibuttonsPrimeFaces DataTable與所需的Radiobutton

用戶不應該轉到下一個嚮導選項卡,直到他將使用Radibuttons在DataTable中選擇一個選項。

或者你有什麼想法如何解決這個問題?感謝您的回覆!

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> 

回答

1

您可以檢查<p:wizard>標籤的flowListener數據選擇下一個/被點擊上一個按鈕時觸發,並有條件地添加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; 
} 

完整的例子是如下所述。

的觀點:

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

豆子:

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

} 
+0

謝謝蒙席!這正是我一直在尋找並且完美的作品!請問另一個問題,你知道如何將captcha插入嚮導嗎? [我發佈的問題](http://stackoverflow.com/questions/16419220/primefaces-wizard-with-captcha) – PrincAm 2013-05-08 23:51:11