-1

私はこれを JSP ページとして持っており、データベース内のテーブルから値を入力するコンボボックスが必要です。クラス Assembly と Class Assemblys があります。Assemblys では、すべてのレコードを Assembly のインスタンスにして、それをリストに入れます。しかし、JSTLで取得できませんか? どうしてこれなの?

 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
 .....
 <select name = "assembly">
 <c:forEach var ="item" items="${Assemblys}">
 <option value="${item.id}">${item.Name}</option>
 </c:forEach>
 </select>

これをクラス アセンブリ クラスとして

 public class Assembly {
 public String Name;
 public int cost;
 public int id;

 public Assembly(String Name, int cost, int id) {
    this.Name = Name;
    this.cost = cost;
    this.id = id;
 }
}

そして、これはアセンブリのクラスです

 public class Assemblys {
  List<Assembly> list = new ArrayList<Assembly>();
  public Assemblys(){

  list = getAssemblys();
         }

  private List<Assembly> getAssemblys() {

    try {
        Connection conn = MysqlConnect.conn();

        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String Query = "Select * from tbl_assembly";
        pstmt = conn.prepareStatement(Query);
           rs = pstmt.executeQuery();
        while (rs.next()) {
          Assembly ass = new Assembly(rs.getString(2),rs.getInt(3),rs.getInt(1));
           list.add(ass);
         }
         conn.close();

    } catch (SQLException ex) {
        Logger.getLogger(Assemblys.class.getName()).log(Level.SEVERE, null, ex);
    }


    return list;
    }
}

ドロップダウン リストが空白なのはなぜですか? 理解できません。これは正しいコードだと思いましたか?

よろしくお願いします!

4

3 に答える 3

1

まず、Assembly クラスに getter を追加する必要があります。

public class Assembly {
 public String Name;
 public int cost;
 public int id;

 public String getName() {
  return this.Name;
 } 

 public int getId() {
   return this.id;
 }

 public Assembly(String Name, int cost, int id) {
    this.Name = Name;
    this.cost = cost;
    this.id = id;
 }
}

次に、アセンブリに getList メソッドを追加します

public class Assemblys {
  List<Assembly> list = new ArrayList<Assembly>();

  public List<Assembly> getList() {
        return this.list;
  } 

  public Assemblys(){

  list = getAssemblys();
         }

  private List<Assembly> getAssemblys() {

    try {
        Connection conn = MysqlConnect.conn();

        PreparedStatement pstmt = null;
        ResultSet rs = null;
        String Query = "Select * from tbl_assembly";
        pstmt = conn.prepareStatement(Query);
           rs = pstmt.executeQuery();
        while (rs.next()) {
          Assembly ass = new Assembly(rs.getString(2),rs.getInt(3),rs.getInt(1));
           list.add(ass);
         }
         conn.close();

    } catch (SQLException ex) {
        Logger.getLogger(Assemblys.class.getName()).log(Level.SEVERE, null, ex);
    }


    return list;
    }
}

そして今jsp

 <select name = "assembly">
 <c:forEach var ="item" items="${Assemblys.list}">
 <option value="${item.id}">${item.Name}</option>
 </c:forEach>
 </select>
于 2013-01-24T07:41:34.150 に答える
1

クラス アセンブリを呼び出すには、jsp でサーブレットまたはスクリプトレット (悪い習慣としてマークされています) を使用する必要があります。指定したタグは、servlet/jsp アプリケーションを使用していると推測されます。

jsp で使用される Assemblys の名前は、要求オブジェクトに属性として含まれている必要があります。Assemblys に指定したキーは、リストのフェッチに使用できます。

于 2013-01-24T07:56:13.507 に答える
0

交換

<c:forEach var ="item" items="${Assemblys}">

<c:forEach var ="item" items="${Assemblys.list}">

編集 :

@ user2006574 と @AntonIlinchik の回答を組み合わせて、アセンブリにゲッターを追加し、アセンブリのゲッターをパブリック アクセスに変更する必要があります。

また、Assemblysコンストラクターが呼び出されるコードを投稿します。

于 2013-01-24T07:40:21.660 に答える