递归实现与实现转换数据的方法

 0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm 
!用递归实现不同效果:
/**
  * 要求打印如下效果:
  *
  * <pre>
  * 传智播客
  * 市场部
  * 市场1部
  * 市场2部
  * 开发部
  * 开发1部
  * 开发2部
  * </pre>
  */
package cn.itcast.oa.test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.junit.Test;

import cn.itcast.oa.entities.Department;

public class WebTreeViewUtilsTest {
效果1:
 /**
  * 要求打印如下效果:
  *
  * <pre>
  * 传智播客
  * 市场部
  * 市场1部
  * 市场2部
  * 开发部
  * 开发1部
  * 开发2部
  * </pre>
  */
效果2:
 /**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
 @Test
 public void printAllDepts_1() {
  List<Department> depts = findTopLevelDepartments();
  for (Department dept : depts) {
   printDeptInfo_1(dept);
  }
 }

 // 打印出部门的信息
 public void printDeptInfo_1(Department dept) {
  // 1,名称
  System.out.println(dept.getName());
  // 2,子部门
  for (Department d : dept.getChildren()) {
   printDeptInfo_1(d);
  }
 }

 /**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
 @Test
 public void printAllDepts_2() {
  List<Department> depts = findTopLevelDepartments();
  for (Department dept : depts) {
   printDeptInfo_2(dept, "");
  }
 }

 public void printDeptInfo_2(Department dept, String prefix) {
  // 1,名称
  System.out.println(prefix + "┠" + dept.getName());
  // 2,子部门
  for (Department d : dept.getChildren()) {
   printDeptInfo_2(d, prefix + " ");
  }
 }

 /**
  * 要求打印如下效果:
  *
  * <pre>
  * ┠传智播客
  *  ┠市场部
  *   ┠市场1部
  *   ┠市场2部
  *  ┠开发部
  *   ┠开发1部
  *   ┠开发2部
  *
  * </pre>
  */
 @Test
 public void printAllDepts_3() {
  List<Department> topLevelDepts = findTopLevelDepartments();
  List<Department> allDepts = getAllDepts_3(topLevelDepts, "");
  for (Department dept : allDepts) {
   System.out.println(dept.getName());
  }
 }

 // 返回当前所有部门及其子孙部门的集合
 public List<Department> getAllDepts_3(Collection<Department> depts, String prefix) {
  List<Department> list = new ArrayList<Department>();
  for (Department dept : depts) {
   dept.setName(prefix + "┠" + dept.getName());
   list.add(dept);

   List<Department> subDepts = getAllDepts_3(dept.getChildren(), prefix + " ");
   list.addAll(subDepts);
  }
  return list;
 }

 // ---
 @Test
 public void printAllDepts_3_2() {
  List<Department> topLevelDepts = findTopLevelDepartments();
  List<Department> allDepts = new ArrayList<Department>();

  preAllDepts_3_2(topLevelDepts, "", allDepts);
  for (Department dept : allDepts) {
   System.out.println(dept.getName());
  }
 }

 public void preAllDepts_3_2(Collection<Department> depts, String prefix, List<Department> allDepts) {
  for (Department dept : depts) {
   dept.setName(prefix + "┠" + dept.getName());
   allDepts.add(dept);

   preAllDepts_3_2(dept.getChildren(), prefix + " ", allDepts);
  }
 }

 // ---

 /**
  * @return 所有最顶层的部门的列表
  */
 public static List<Department> findTopLevelDepartments() {
  Department dept11 = new Department();
  dept11.setId(11);
  dept11.setName("市场1部");
  Department dept12 = new Department();
  dept12.setId(12);
  dept12.setName("市场2部");

  Department dept1 = new Department();
  dept1.setId(1);
  dept1.setName("市场部");
  dept1.getChildren().add(dept11);
  dept1.getChildren().add(dept12);

  Department dept21 = new Department();
  dept21.setId(21);
  dept21.setName("开发1部");
  Department dept22 = new Department();
  dept22.setId(22);
  dept22.setName("开发2部");

  Department dept2 = new Department();
  dept2.setId(2);
  dept2.setName("开发部");
  dept2.getChildren().add(dept21);
  dept2.getChildren().add(dept22);

  Department itcast = new Department();
  itcast.setId(1000);
  itcast.setName("传智播客");
  itcast.getChildren().add(dept1);
  itcast.getChildren().add(dept2);

  List<Department> depts = new ArrayList<Department>();
  depts.add(itcast);
  return depts;
 }
}

实现一个窗口选择后数据跑到另一个页面并自动关闭的例题:
main.html
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <!--
  <script type="text/javascript" src="script.js"></script>
  <link rel="stylesheet" type="text/css" href="style.css">
  -->
  <script type="text/javascript">
   function openSelDept(){
     var url="selDept.html";
   window.showModalDialog(url,window,"dialogwidth:350px;dialogHeight:350px");
  
  
  // var win=  window.open(url,"selDept","menubar=no,toolbar=no");
   //win.focus();
   }
  </script>
 </head>
 <body>
  
  <form>
   所属部门<input type="text" name="deptName" readonly="true"/>
   
   <input type="button" value="选择部门" οnclick="openSelDept()"/>
  </form>
  <script type="text/javascript">
  </script>
 </body>
</html>


<html>
 <head>
 <base target="_self"/>
  <meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
  <!--
  <script type="text/javascript" src="script.js"></script>
  <link rel="stylesheet" type="text/css" href="style.css">
  -->
  <script type="text/javascript">
     function selMe(deptName){
     var mainWindow =window.dialogArguments;
    
     mainWindow.document.forms[0].deptName.value=deptName; 
    
     // window.close();
     }
  </script>
 </head>
 <body>
  <a href="javascript:selMe('市场部')"> 市场部</a>
   
          <a href="javascript:selMe('开发部门')"> 开发部门</a>
 </body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值