2010-03-18 86 views
0

我有關於豐富的臉和豆的問題。 我有一個使用richfaces的jsp頁面,裏面有:rich:extendedDatatable組件,它將我的MainBean中的數據作爲ArrayList(此bean查詢mySQL並將結果放入稍後填充dataTable的ArrayList中)。數據表中有4列,前3個是h:outputLabels,最後一個是複選框。現在我有一個問題:如何從選定的行中獲取信息?我的意思是,當用戶點擊複選框時,我想採用id /名稱或任何與此特定行關聯的內容,然後當用戶單擊Apply時更改a4j:按鈕,我將更新數據庫,並且當用戶再次登錄時,他會查看更新信息:例如現在複選框被選中/未選中,因爲用戶檢查了該複選框。 我相信對於使用它的人來說,這是一個簡單的查詢。對我來說例如。 flash開發者在as3中很容易,但是在這裏我還沒有找到解決方案,請幫助。豐富的臉和數據表

更新

讓我來解釋和發佈的代碼。當用戶登錄時,我對有2個表的數據庫進行查詢。第一個是「活動」(act_id,名稱,描述,日期),第二個叫做「common」(存儲user_id和act_id)。我的想法是存儲告訴我哪些用戶被分配給每個活動的數據。在這種情況下,例如ID爲1的用戶正在使用活動1 2和3,而ID 2爲2的用戶正在使用活動2和4,然後當從數據庫查詢返回結果時,我只需創建一個具有合適數據的ArrayList。所以當用戶點擊複選框,然後插入查詢,當用戶取消選擇複選框,然後刪除查詢到數據庫(基於用戶ID和act_id)這裏是查詢方法的代碼,首先我必須得到user_id:

public String login() { 
    Statement stmt2 = null; 
    Statement stmt3 = null; 
    ResultSet rs = null; 
    ResultSet rs2 = null; 
    ResultSet rs3 = null; 
    String sql = "SELECT * from user"; 
    String sql2 = "SELECT * from activities"; 
    try { 
     conn = DriverManager.getConnection(jdbcUrl, user, pass); 
     stmt = conn.createStatement(); 
     stmt2 = conn.createStatement(); 
     boolean selected = true; 

     rs = stmt.executeQuery(sql); 
     rs2 = stmt2.executeQuery(sql2); 
     while(rs.next()) { 
     if (username != null && password != null) { 
      if (rs.getString("username").equals(username) 
       && rs.getString("password").equals(password)) { 
      id = rs.getString("user_id"); 
      stmt3 = conn.createStatement(); 
      while(rs2.next()){ 
       selected = false; 
       String aid = rs2.getString("act_id"); 
       String name = rs2.getString("name"); 
       String desc = rs2.getString("desc"); 
       String date = rs2.getString("date"); 
       String sql3 = "SELECT * from common where uid="+id+""; 
       rs3 = stmt3.executeQuery(sql3); 
       while(rs3.next()) { 
       if(rs3.getString("aid").equals(aid)){ 
        activities.add(new Activity(name, desc, date, true)); 
        selected = true; 
       } 

       } 
       if(!selected) 
       activities.add(new Activity(name, desc, date, false)); 
      } 
      return "success"; 
      } 
     } 
    } 
    }catch (SQLException sqle) { 
     sqle.printStackTrace(); 
    } finally { 
     try { 
     rs.close(); 
     stmt.close(); 
     conn.close(); 
     } catch (SQLException e) { 
     } 
    } 
    return "failure"; 
    } 

和豐富的面孔查看:

<a4j:form> 
<rich:extendedDataTable id="activities" value="#{mainBean.activities}" var="acts" sortMode="single"> 
     <rich:column label="Name" sortable="true" sortBy="#{acts.name}"> 
     <f:facet name="header"> 
       <h:outputText value="Name" /> 
      </f:facet> 
     <h:outputLabel value="#{acts.name}" /> 
     </rich:column> 
     <rich:column label="Description" sortable="true" sortBy="#{acts.description}"> 
     <f:facet name="header"> 
       <h:outputText value="Description" /> 
      </f:facet> 
     <h:outputLabel value="#{acts.description}" /> 
     </rich:column> 
     <rich:column label="Date" sortable="true" sortBy="#{acts.date}"> 
     <f:facet name="header"> 
       <h:outputText value="Date" /> 
      </f:facet> 
     <h:outputLabel value="#{acts.date}" /> 
     </rich:column> 
     <rich:column label="Selected" sortable="true" sortBy="#{acts.selected}"> 
     <f:facet name="header"> 
       <h:outputText value="Selected" /> 
      </f:facet> 
     <h:selectBooleanCheckbox value="#{acts.selected}" /> 
     </rich:column> 
     </rich:extendedDataTable> 
     <h:commandButton value="Apply changes" action="#{mainBean.addActivity}" /> 
     </a4j:form> 
+0

對不起,我不明白問題,因爲你試圖在更新中解釋。我認爲創建一個空白的遊樂場項目並閱讀本文以更好地瞭解數據表的工作原理和可用方式可能很有用:http://balusc.blogspot.com/2006/06/using-datatables.html – BalusC 2010-03-21 17:07:05

回答

1

JSF ArrayList中已經更新了豆子。只是堅持它在行動方法通常的方式:

public void save() { 
    mainBeanDAO.save(mainBeans); 
} 
+0

並記得設置'selectionMode =「none」',以便extendedDataTable中的內置選擇不會混亂。 – Bozho 2010-03-18 12:12:30

+0

請您在下面查找示例嗎? – ortho 2010-03-21 16:26:24