private void buildOptions(Category c, StringBuffer sb, String prefix) {
        for (int i = 0; i < c.getItems().size(); i++) {
            Category ci = (Category) c.getItems().get(i);
            sb.append("<option value='" + ci.getId() + "'>" + 
                          prefix + "&nbsp;&nbsp;" + ci.getName() + 
                      "</option>");            if (ci.getItems().size() > 0) {
                buildOptions(ci, sb, prefix+"&nbsp;&nbsp;");
            }
        }
    }我这里的是一个称为类别对象,楼主的是部门,其实是一样的。getItems 方法是获得某个类别的子类别 List,因此,要有使用一个实际上并不存在的根类别对象 root 进行最初的调用:buildOptions(root, sb, "");
out.println(sb.toString());