实体类:
//员工类
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;
}
...
}