0

濃厚な顔と豆について質問があります。richfacesを使用しているjspページがあり、その中に:rich:extendedDatatableコンポーネントがあります。これは、MainBeanからArrayListとしてデータを取得します(このBeanはmySQLにクエリを実行し、結果をArrayListに入れて後でdataTableに入力します)。datatableには4つの列があり、最初の3つはh:outputLabelsで、最後の1つはチェックボックスです。ここで質問があります。選択した行から情報を取得するにはどうすればよいですか。つまり、ユーザーがチェックボックスをクリックすると、ID /名前またはこの特定の行に関連付けられているものを取得し、ユーザーが[変更されたa4j:ボタンを適用]をクリックすると、データベースが更新され、ユーザーが再度ログインすると、更新された情報を参照してください。たとえば、ユーザーがチェックしたため、チェックボックスが選択されている/選択されていない。それは、それを使って働いた人にとっては簡単な質問だと思います。私にとっては元 フラッシュ開発者はas3で簡単ですが、ここではまだ解決策が見つかりませんでした。助けてください。

更新

コードを説明して公開しましょう。ユーザーがログインすると、2つのテーブルがあるデータベースにクエリを実行します。1つ目は「アクティビティ」(act_id、名前、説明、日付)で、2つ目は「共通」(user_idとact_idを格納する)と呼ばれます。私の考えは、どのユーザーが各アクティビティに割り当てられているかを示すデータを保存することです。この場合、たとえば、ID1のユーザーはアクティビティ12と3を使用し、ID 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>
4

1 に答える 1

1

JSF はすでに arraylist 内の Bean を更新しています。アクション メソッドで通常の方法で永続化するだけです。

public void save() {
    mainBeanDAO.save(mainBeans);
}
于 2010-03-18T11:30:11.590 に答える