struts标签,请你走开(系列一)
在项目开发的很多时候,用户需要更友好,更容易理解的操作界面,而为了能够达到这种表现界面,struts标签显得力不从心,本人经过几个项目的开发当中 逐渐的摈弃了struts标签,而由JSTL来做为JSP页面的表达者。
struts标签之死穴一 不支持嵌套
看看这种常见的需求吧。一个用户隶属于一个职能部门,比如
项目要求 职能部门有五个(乱写的)
1、企划部
2、网络集成部
3、行政部
4、营销部
5、产品部
项目要求 一共有二个员工
1、张三 隶属于行政部
2、李四 隶属于营销部
而你想把张三和李四都列表出来,显示为如下:
姓名 部门名称
张三 行政部
李四 营销部
而且还需要用户的列表链接到修改页面当中(假如只修改部门)应该如何做呢。
在使用struts标签是很难做到的,除非你非常不在意内存的使用(乱写技术性代码)
看看JSTL是如何做的吧。
从STRUTS的ACTION当中加载两个对象
List GetAllDept = UserDAO.GetAllDept();//取得所有部门
List GetALLUser = UserDAO.GetAllUser();//取得所有用户
request.setAttribute("View_Dept", GetAllDept);
request.setAttribute("View_User", GetALLUser);
/code]
在页面当中加入对JSTL的引用
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<table><tr><td align="center"><a href="User.do?method=EditUser&UserId=<c:out value='${View_User.UserId}'/>"><c:out value="${View_User.UserName}" /> </a></td><td align="center"><c:forEach items="${View_Dept}" var="View_Dept"><c:if test="${View_User.Dept.DeptId==View_Dept.DeptId}"><c:out value="${View_Dept.DeptName}" /></c:if></c:forEach></td></tr></table>String ModifyUserId = request.getParameter("GroupUserId");if (ModifyUserId == null && ModifyUserId.equals("")) {//这是出错处理request.setAttribute("UserMsg", "User.ValidateUser");return mapping.findForward("Fail");}DynaValidatorForm UserActionForm = (DynaValidatorForm) form;User user = UserDAO.GetUser(ModifyUserId);List GetAllDept = UserDAO.GetAllDept();//取得所有部门request.setAttribute("View_Dept", GetAllDept);UserActionForm.set("User", User);<html:select property="DeptAsString"><c:forEach items="${View_Dept}" var="View_Dept"><c:choose><c:when test="${User.Dept.DeptId==View_Dept.DeptId}"><optionvalue="<c:out value='${View_Dept.DeptId}' />"selected><c:out value="${View_Dept.DeptName}" /></option></c:when><c:otherwise><option value="<c:out value='${View_Dept.DeptId}' />"><c:out value="${View_Dept.DeptName}" /></option></c:otherwise></c:choose></c:forEach></html:select>