2013-05-03 59 views
0

我正在爲新用戶開發一個註冊應用程序。在一頁上,用戶可以選擇免費期限。爲此我使用PrimeFaces DataTable - Radiobutton。我一直在關注PrimeFaces ShowCaseDataTable - Radiobutton:如何獲取所選行的數據

也許現在我有一個有點愚蠢的問題,但我怎樣才能獲得數據,例如,選定行的c_id?我真的無法解決它。 例如這個嘗試不起作用:

public String selectData() { 
     String result = null; 
     CollectionTerm selectedTerm = this.termsModel.getRowData(); 
     System.out.println("Row id: " + selectedTerm.getC_id()); 
     return result; 
    } 

它返回我的錯誤:java.lang.IllegalArgumentException異常:行不可用

第二個問題,我怎麼能上顯示所選行的數據另一個頁面?我做錯了:

<h:form id="test"> 
    <h:outputText value="Id of selected row: " /> 
    <h:outputText value="#{dl.c_id}" /> 
</h:form> 

感謝您的幫助和建議!我是JSF中的新成員,有時候這對我來說很混亂,我找不到合適的答案。

JSF Managed Bean的

@ManagedBean 
@SessionScoped 
public class Register implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private UserDetails user; 
    private Term term; 
    private CollectionTerm collectionTerm; 

    private List<CollectionTerm> dataList; 
    private CollectionTerm selectedTerm; 
    private TermDataModel termsModel; 

    public Register() { 

     dataList = new ArrayList<CollectionTerm>(); 
     loadDataList(); 
     termsModel = new TermDataModel(dataList); 

     user = new UserDetails(); 
     term = new Term(); 
     collectionTerm = new CollectionTerm(); 
    } 

    // getters and setters 

private void loadDataList() { 
    Session session = HibernateUtil.getSessionFactory().openSession(); 
    dataList = session.createQuery("from CollectionTerm").list(); 
} 

} 

數據模型

import java.util.List; 

import javax.faces.model.ListDataModel; 

import org.primefaces.model.SelectableDataModel; 

import de.ibmt.upb.model.CollectionTerm; 

public class TermDataModel extends ListDataModel<CollectionTerm> implements SelectableDataModel<CollectionTerm> { 

    public TermDataModel() {  
    } 

    public TermDataModel(List<CollectionTerm> data) { 
     super(data); 
    } 

    @Override 
    public CollectionTerm getRowData(String rowKey) { 

     List<CollectionTerm> dataList = (List<CollectionTerm>) getWrappedData(); 

     for(CollectionTerm term : dataList) { 
      if(term.getC_id().equals(rowKey)) 
       return term; 
     } 

     return null; 
    } 

    @Override 
    public Object getRowKey(CollectionTerm term) { 
     return term.getC_id(); 
    } 

} 

JSF

<h:form id="collection"> 
    <p:fieldset legend="Date and time"> 
     <p:dataTable id="collection" value="#{register.termsModel}" var="dl" selection="#{register.selectedTerm}"> 
      <p:column selectionMode="single" style="width:2%" /> 
      <p:column> 
       #{dl.c_id} 
      </p:column> 
      <p:column> 
       #{dl.dateCollection} 
      </p:column> 
      <p:column> 
       #{dl.timeCollection} 
      </p:column> 
     </p:dataTable> 
     <p:commandButton value="Save" type="submit" action="#{register.selectData()}" ajax="false" /> 
    </p:fieldset> 
</h:form> 

回答

0

的PrimeFaces <p:dataTable selection"...">並不需要實現productModel。上述問題的

解決方案:使用rowKey

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

如何獲得數據,例如C_ID,選擇行:

public String selectData() { 
    String result = null; 
    System.out.println("Get row data: " + selectedTerm.getC_id()); 
    return result; 
} 

如何選擇其他頁面上排顯示數據:

<h:form id="test"> 
    <h:outputText value="Id of selected row: " /> 
    <h:outputText value="#{register.selectedTerm.c_id}" /> 
</h:form> 
相關問題