2010-03-18 1 views
0

풍부한 얼굴과 콩에 관한 질문이 있습니다. richfaces를 사용하는 jsp 페이지가 있는데 그 안에 rich : extendedDatatable 구성 요소가 있습니다. MainBean의 데이터를 ArrayList로 가져옵니다.이 bean은 mySQL을 쿼리하고 나중에 dataTable을 채우는 ArrayList에 결과를 저장합니다. datatable에는 4 개의 열이 있는데, 처음 3 개는 h : outputLabels이고 마지막 것은 checkbox입니다. 이제 질문이 있습니다 : 선택한 행의 정보를 어떻게 얻을 수 있습니까? 나는 사용자가 체크 박스를 클릭 할 때 ID/이름 또는이 특정 행과 관련된 모든 것을 가져오고 사용자가 변경된 a4j 적용 버튼을 클릭하면 데이터베이스를 업데이트 할 것이며 사용자가 다시 로그인하면 업데이트 된 정보보기 : 예 체크 박스는 사용자가 체크했기 때문에 선택되었거나 선택되지 않았습니다. 나는 그것이 그와 함께 일하는 누군가를위한 간단한 쿼리라고 생각한다. 나를 위해 전. 플래시 개발자는 as3에서 쉽게 될 것이지만 여기에서는 아직 해결책을 찾지 못했습니다. 제발 도와주세요.풍부한 얼굴과 데이터 테이블

업데이트는 :

나를 설명하고 코드를 게시 보자. 사용자가 로그인하면 데이터베이스에 2 개의 테이블이있는 쿼리를 만듭니다. 첫 번째는 "activities"(act_id, 이름, 설명, 날짜)이고 두 번째 것은 "common"(user_id 및 act_id를 저장하는)이라고합니다. 내 아이디어는 각 사용자가 각 활동에 할당 된 데이터를 저장하는 것입니다. 이 경우, 예를 들어. id 1 사용자는 activity 1 2와 3을 사용하고 id 2 사용자는 activity 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

답변

1

JSF는 이미 ArrayList에있는 콩을 업데이트했습니다. 액션 메서드에서 일반적인 방법으로 유지하십시오.

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

그리고 extendedDataTable에 내장 된 선택이 엉망이되지 않도록'selectionMode = "none"'을 설정하는 것을 기억하십시오. – Bozho

+0

아래에서 예를 찾아보실 수 있습니까? – ortho