入下拉框的可选项是一个树形结构列表,在list里面的各个数据已经有了父子关系,
如何让下拉列表的可选项实现相应的层次关系,结构如下:  北京市
    --朝阳区
      --国贸
    --海淀区
      --中关村
  河北省
    --石家庄市
让这些层次结构出现在下拉框的可选项目中.
其中,北京市,朝阳区等都已经在一个list里面,而且他们已经有了明确的父子关系.
用jsp+struts技术实现,如下:
<td>
<html:select property="saleWay" size="1" style="WIDTH:125px">
<option selected value=null></Option>
.
.
.
</html:select>
</td>省略号的地方如何写jsp代码啊?请大虾指点.

解决方案 »

  1.   


      /**
       * 根据List对象生成<select>控件
       * @param l list
       * @param formFieldName form中的名称
       * @param defaultValue 默认值
       * @return
       */
      public static String genSelect(List lis, String formFieldName,
                                     Object defaultValue) {
        StringBuffer buf = new StringBuffer();
        buf.append("<select name=\"" + formFieldName + "\">");
        //if (formFieldName.equals("doc_class")) {
        //  buf.append("<option>&lt;根&gt;</option>");
        //}
        for (int i = 0; i < lis.size(); i++) {
          boolean selected = false;
          HashMap row = (HashMap) lis.get(i);
          Object key = row.keySet().iterator().next();
          Object value = row.get(key);
          if (key.toString().equals(defaultValue)) {
            selected = true;
          }
          buf.append("<option value=\"" + key + "\"");
          if (selected) {
            buf.append(" selected");
          }
          buf.append(">" + value + "</option>");
        }
        buf.append("</select>");
        return buf.toString();
      }
      

  2.   

    sole_lodestar() 的代码好像就是一般的下拉吧,仅从list里面取出数据列在下拉框下面,
    没有实现那种按照父子关系得到的分层啊.仅是下面的效果吧:
    北京市
    朝阳区
    国贸
    海淀区
    中关村
    河北省
    石家庄市
    楼主要的是在下拉中显示的如下分层:北京市
        --朝阳区
            --国贸
        --海淀区
            --中关村
    河北省
        --石家庄市
    继续关注!
      

  3.   

    搞错了  //上传文档时所提供分类
      public List genSelection() {
        ArrayList returnList = new ArrayList();
        try {
          Session sess = HibernateUtilServlet.currentSession();
          Transaction tx = sess.beginTransaction();
          Query q = sess.createQuery
              ("from com.document.Doc_class docc where docc.dc_parent_id is null order by docc.dc_db_id");
          List list = q.list() ;
          for (int i = 0; i < list.size(); i++) {
            Doc_class dc = (Doc_class) list.get(i);
            HashMap row = new HashMap();
            row.put(dc.getDc_db_id(), dc.getDc_class_name());
            returnList.add(row);
            genSelection(dc.getDc_db_id().intValue(),1,returnList);
          }
          return returnList;
        } catch (HibernateException he) {
          System.out.println(he);
          return null;
        }
      }
      public List genSelection(int id, int layer, ArrayList returnList) {
        try {
          Session sess = HibernateUtilServlet.currentSession();
          Transaction tx = sess.beginTransaction();
          Query q = sess.createQuery
              ("from com.document.Doc_class docc where docc.dc_parent_id = ? order by docc.dc_db_id");
          q.setInteger(0, id);
          List list = q.list();
          for (int i = 0; i < list.size(); i++) {
            Doc_class dc = (Doc_class) list.get(i);
            String className = "└" + dc.getDc_class_name();
            for (int j = 0; j < layer; j++) {
              className = "&nbsp;&nbsp;" + className;
            }
            HashMap row = new HashMap();
            row.put(dc.getDc_db_id(), className);
            returnList.add(row);
            genSelection(dc.getDc_db_id().intValue(), layer + 1, returnList);
          }
          return returnList;
        }
        catch (HibernateException he) {
          System.out.println(he);
          return null;
        }
      }