下拉表单项的二级联动及回显

实体类:

//员工类
public class CrmStaff {
	private String staffId;
	private String loginName;
	private String loginPwd;
	private String staffName;
	private String gender;
	private Date onDutyDate;
	
	private CrmPost post;
	...
	..
	.
//职务类
public class CrmPost {
	private String postId;
	private String postName;
	
	private CrmDepartment department;
	private Set<CrmStaff> staffSet = new HashSet<CrmStaff>();
	...
	..
	.
//部门类
public class CrmDepartment {
	private String depId;
	private String depName;
	
	private Set<CrmPost> postSet = new HashSet<CrmPost>();
	...
	..
	.

Jsp

...
<script type="text/javascript">
	//根据不同的浏览器获得xmlHttp引擎
	function createXMLHttpRequest() {
      try {
          return new XMLHttpRequest();
      } catch(e) {
          try {
	      return new ActiveXObject("Msxml2.XMLHTTP");
	  } catch(e) {
	      try {
	          return new ActiveXObject("Microsoft.XMLHTTP");
	      } catch(e) {
	          alert("哥们儿,你用的是什么浏览器啊?");
	          throw e;
	      }
	  }
      }
  }
  
	//二级联动
	function showPost(obj){
		var depId = obj.value;
		var xmlhttp = createXMLHttpRequest();
		xmlhttp.onreadystatechange = function(){
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				var textDate = xmlhttp.responseText;
				//将字符串手动转换成json数组对象
				var jsonData = eval("("+textDate+")");
				var postSelectElement = document.getElementById("postSelectId");
				postSelectElement.innerHTML="<option value=''>---请选择---</option>";
				//遍历数组
				for ( var i = 0; i < jsonData.length; i++) {
					var postObj = jsonData[i];
					var postId = postObj.postId;
					var postName = postObj.postName;
					postSelectElement.innerHTML += "<option value='"+postId+"'>"+postName+"</option>";
				}
			}
		}
		var url="${pageContext.request.contextPath}/postAction_findAllwithDepartment?department.depId="+depId;
		xmlhttp.open("GET",url);
		xmlhttp.send(null);
		
	}
</script>
...
..
.
<s:form>
	
	<table width="88%" border="0" class="emp_table" style="width:80%;">
	 <tr>
	    <td>登录名:</td>
	    <td><s:textfield name="loginName" ></s:textfield></td>
	    <td>密码:</td>
	    <td><s:password name="loginPwd" showPassword="true"></s:password></td>
	  </tr>
	 <tr>
	    <td>姓名:</td>
	    <td><s:textfield name="staffName"></s:textfield></td>
	    <td>性别:</td>
	    <td>
	    	<s:radio list="{'男','女'}" name="gender"></s:radio>
	    </td>
	  </tr>
	 <tr>
	    <td width="10%">所属部门:</td>
	    <td width="20%">
			<s:select list="AllDepartment" listKey="depId" listValue="depName" headerKey="" headerValue="---请选择---" name="post.department.depId" onchange="showPost(this)">
			</s:select>

	    </td>
	    <td width="8%">职务:</td>
	    <td width="62%">			
			<s:select list="post!=null ? post.department.postSet : {}" name="post.postId" listKey="postId" listValue="postName" headerKey="" headerValue="---请选择---" id="postSelectId"></s:select>
	    </td>
	  </tr>
	  <tr>
	    <td width="10%">入职时间:</td>
	    <td width="20%">
	    	<s:date name="onDutyDate" var="myDate" format="yyyy--MM--dd"/>
	    	<s:textfield name="onDutyDate" readonly="true" value="%{#myDate}" onfocus="c.showMoreDay=true;c.show(this);"></s:textfield>
	    </td>
	    <td width="8%"></td>
	    <td width="62%"></td>
	  </tr>
	</table>
</s:form>

...
..
.

Action类

//员工Action
//负责通过员工Id查找员工并把对象压入值栈中用于基本表单项的回显,调用部门Service查找所有部分用于下拉表达项的回显
public class StaffAction extends ActionSupport implements ModelDriven<CrmStaff>{
	private StaffService staffService;
	private DepartmentService departmentService;
		...	
	public String editUI() throws Exception{
		CrmStaff findStaff = staffService.findById(staff.getStaffId());
		ActionContext.getContext().getValueStack().push(findStaff);
		List<CrmDepartment> AllDepartment = departmentService.findAll();
		ActionContext.getContext().getValueStack().set("AllDepartment", AllDepartment);
		return "editUI";
	}
	...
}
//职务Action
//负责部分与职务之间的二级联动,通过部门对象来查找职务,并将其转换成json字符串发给浏览器
public class PostAction extends ActionSupport implements ModelDriven<CrmPost>{
	private PostService postService;
	...
	public String findAllwithDepartment() throws Exception{
		List<CrmPost> allPost = this.postService.findAll(post.getDepartment());
		JsonConfig jsonConfig = new JsonConfig();
		jsonConfig.setExcludes(new String[]{"department","staffSet"});
		String jsonDate = JSONArray.fromObject(allPost,jsonConfig).toString();
		System.out.println(jsonDate);
		ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");
		ServletActionContext.getResponse().getWriter().print(jsonDate);
		return NONE;
	}
	...
}

猜你喜欢

转载自blog.csdn.net/wang037195/article/details/82773509
今日推荐