struts标签,请你走开(系列1)
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的引用
然后写代码如下:
其中View_User.Dept.DeptId表示USER表与DEPT表的一个关系(外键)
你就可以看到所显示的列表了。
还有如果在修改用户时,则也与上面的差不多,首先在ACTION当中加入:
然后页面当中显示如下(部门为LISTBOX),例子当中只显示部门
可以看到HTML的SELECT有一个DeptAsString,你可以在FORM当中指定一个STRING的FORM属性。
这样用户的要求就可以完成了。
本次只说明方法,而代码没有经过测试。希望大家多多观注我的BLOG,下一次将臭骂ACTIONFROM不支持的DATE类型及解决方法。
你的提问是不是有问题?不让使用JSP和标签,那我还用什么写?
我的意思是,用普通的JAVA类封装常用逻辑,用JSP调用它们。
所有的标签功能还不都是JAVA类写的?不会增加功能,只是一种封装而已。
在项目开发的很多时候,用户需要更友好,更容易理解的操作界面,而为了能够达到这种表现界面,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>
其中View_User.Dept.DeptId表示USER表与DEPT表的一个关系(外键)
你就可以看到所显示的列表了。
还有如果在修改用户时,则也与上面的差不多,首先在ACTION当中加入:
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);
然后页面当中显示如下(部门为LISTBOX),例子当中只显示部门
<html:select property="DeptAsString"> <c:forEach items="${View_Dept}" var="View_Dept"> <c:choose> <c:when test="${User.Dept.DeptId==View_Dept.DeptId}"> <option value="<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>
可以看到HTML的SELECT有一个DeptAsString,你可以在FORM当中指定一个STRING的FORM属性。
这样用户的要求就可以完成了。
本次只说明方法,而代码没有经过测试。希望大家多多观注我的BLOG,下一次将臭骂ACTIONFROM不支持的DATE类型及解决方法。
1 楼
shmily
2006-09-25
在已经成型的框架上进行开发,证明该框架有可取之处,我们只有选择与不选择之间进行选择,而没有任何资格与权利去“臭骂”任何一项技术的存在,如果真的用到“臭骂”时,那估计你应该有出一种更好的框架的能力,而且已经广泛使用中。用了别人的东西,还再骂别人的东西不好,估计此类人物不在少数
2 楼
adamzhao
2006-09-25
我百分之九十的时候采用struts自带的标签,百分之五使用jstl,剩余的就使用纯jsp代码。
struts标签开始的时候确实不太好用,不过只要熟悉了他的特性,还是很不错的。
他最大的缺憾可能就是嵌套支持的太不能让人满意了
struts标签开始的时候确实不太好用,不过只要熟悉了他的特性,还是很不错的。
他最大的缺憾可能就是嵌套支持的太不能让人满意了
3 楼
LucasLee
2006-09-26
自从我学习使用这些标签开始,我都没觉得这些玩意对我有多少用处。JSP能处理的,他换了一个方式,看上去少写点东西,其实多增加了额外的负担。对于我,已经大量使用JAVA类封装JSP逻辑了,JSP代码本来就很少,用不着再搞个标签来增加可读性。
So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
4 楼
adamzhao
2006-09-26
Lucas Lee 写道
自从我学习使用这些标签开始,我都没觉得这些玩意对我有多少用处。JSP能处理的,他换了一个方式,看上去少写点东西,其实多增加了额外的负担。对于我,已经大量使用JAVA类封装JSP逻辑了,JSP代码本来就很少,用不着再搞个标签来增加可读性。
So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
呵呵,不知道像List, view这样的情况,在不使用任何jsp代码和标签的情况下,如何封装?So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
5 楼
haobaobao
2006-09-26
还是要看到积极的一面的。
6 楼
LucasLee
2006-09-26
adamzhao 写道
Lucas Lee 写道
自从我学习使用这些标签开始,我都没觉得这些玩意对我有多少用处。JSP能处理的,他换了一个方式,看上去少写点东西,其实多增加了额外的负担。对于我,已经大量使用JAVA类封装JSP逻辑了,JSP代码本来就很少,用不着再搞个标签来增加可读性。
So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
呵呵,不知道像List, view这样的情况,在不使用任何jsp代码和标签的情况下,如何封装?So,我现在是基本不用标签。也许,对于美工什么的能觉得好些?不过我们的项目中,不是没有美工,就是美工只管图片,不负责网页设计。
你的提问是不是有问题?不让使用JSP和标签,那我还用什么写?
我的意思是,用普通的JAVA类封装常用逻辑,用JSP调用它们。
所有的标签功能还不都是JAVA类写的?不会增加功能,只是一种封装而已。
7 楼
zrweng
2006-09-26
标签很少用,基本上不用,宁愿用helper辅助类,如
<%=new Tree(name,DataList)%>
<%=new Tree(name,DataList)%>
8 楼
dylan_cherie
2006-09-26
写java代码还是用标签其实都是一样的,只不过标签已经规范好内部实现了,用起来方便些。我100%用jstl。
9 楼
Haiou
2007-02-08
请问可以帮小弟作个级联的下拉列表吗?也是用的struts+JSTL啊!!
多谢拉! 因为我发现很多人都不会阿!!!
多谢拉! 因为我发现很多人都不会阿!!!