2010-03-18 136 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