Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > struts表单 vs JSTL表现之多条件查询示例
【标  题】:struts表单 vs JSTL表现之多条件查询示例
【关键字】:struts,vs,JSTL
【来  源】:http://www.blogjava.net/heweiya/archive/2006/07/21/59383.html

struts表单 vs JSTL表现之多条件查询示例

Your Ad Here ??? struts表单主要是利用actionform来取得JSP页面所有的request的,所有的Struts标签无非在取得request当中的所有INPUT,并赋值回标签值的,同理,JSTL能够在JSP表单当中轻易的表现要输出的结果。
??? 如果你是高手,你就知道这个标题有误,是的,struts表单与JSTL表现没有可比性,但是如果我们要在实现一个多条件的查询页面时,这个比较就比较有效了。
??? 我不妨比较一下利用struts表单的查询实现 和 利用JSTL做为表现而实现的查询功能有什么不同,让读者寻其方便。
??? 示例说明:
??? 用户表-USER
??? username? 用户名称
??? loginid?? 登录ID
??? sex?????? 性别
??? 一、利用struts表单的查询实现
??????? 实现步骤:
??????? 创建多条件的序列化对象(java)->在struts.config当中申明actionform->Action当中实现->输出结果
???????
????/**?The?value?of?the?simple?userName?property.?*/
????
private?java.lang.String?userName;
????
/**?The?value?of?the?simple?loginId?property.?*/
????
private?java.lang.String?loginId;
????
/**?The?value?of?the?simple?sex?property.?*/
????
private?java.lang.String?sex;
????
/**
?????*?Return?the?value?of?the?USER_NAME?column.
?????*?
@return?java.lang.String
?????
*/
????
public?java.lang.String?getUserName()
????{
????????
return?this.userName;
????}

????
/**
?????*?Set?the?value?of?the?USER_NAME?column.
?????*?
@param?userName
?????
*/
????
public?void?setUserName(java.lang.String?userName)
????{
????????
this.userName?=?userName;
????
/**
?????*?Return?the?value?of?the?LOGIN_ID?column.
?????*?
@return?java.lang.String
?????
*/
????
public?java.lang.String?getLoginId()
????{
????????
return?this.loginId;
????}

????
/**
?????*?Set?the?value?of?the?LOGIN_ID?column.
?????*?
@param?loginId
?????
*/
????
public?void?setLoginId(java.lang.String?loginId)
????{
????????
this.loginId?=?loginId;
????}
????
/**
?????*?Return?the?value?of?the?sex?column.
?????*?
@return?java.lang.String
?????
*/
????
public?java.lang.String?getSex()
????{
????????
return?this.sex;
????}

????
/**
?????*?Set?the?value?of?the?sex?column.
?????*?
@param?loginId
?????
*/
????
public?void?setSex(java.lang.String?sex)
????{
????????
this.sex?=?sex;
????}
<!-- struts_fonfig -->
???????
<form-bean?name="UserActionForm"?type="org.apache.struts.validator.DynaValidatorForm">
<form-property?name="userCondition"?type="com.antbee.searchCondition.UserFindCondition"?/>????????
????????
</form-bean>
Action当中
DynaValidatorForm?UserForm?=?(DynaValidatorForm)?form;
????????UserFindCondition?Condition?
=?(UserFindCondition)?UserActionForm
????????????????.get(
"userCondition");//?取得查询条件
List?user?=?userManager.find(Condition,
????????????????(iCurPageNo?
-?1)?*?pageCon.PAGE_SIZE,?pageCon.PAGE_SIZE);//呵呵,加入了hibernate的分页
具体实现:
????public?List?find(UserFindCondition?Condition,?int?begin,
????????????
int?count)?{
????????StringBuffer?sql?
=?new?StringBuffer("from?User?as?a?where?1=1");??????????????
? ? ? ?
if?(Condition?!=?null)?{
????????????makeSql(sql,?shipmentFindCondition);
????????}
????????String?fsql?
=?sql.toString();
????????Query?query?
=?this.getSession().createQuery(fsql);
????????
if?(Condition?!=?null)?{
????????????setParameter(query,?Condition);
????????}
????????query.setFirstResult(begin);
????????query.setMaxResults(count);
????????List?tt?
=?query.list();
????????
return?tt;
????}

--
??? /**
??? ?* 根据条件生成一个sql语句
??? ?*
??? ?* @author 和
??? ?* @param sql
??? ?*??????????? 初始的sql语句(一般为select a from A as a where 1=1)
??? ?* @param condition
??? ?*??????????? 查询的条件
??? ?* @return
??? ?* @version 1.0
??? ?*/
private
?void?makeSql(StringBuffer?sql, UserFindCondition?condition)?{
????????
if?(condition.getUsername()?!=?null
????????????????
&&?!condition.getUsername().toString().equals(""))?{
????????????sql
????????????????????.append(
"?and a.username like?:username");
????????}

????????
if?(condition.getLoginid()?!=?null
????????????????
&&?!condition.getLoginid(().equals(""))?{
????????????sql
????????????????????.append(
"?and a.loginid( =?:loginid(");
????????}

????????
if?(condition.getSex()?!=?null
????????????????
&&?!condition.getSex().equals(""))?{
????????????sql.append(
"?and a.sex =?:sex");
????????}


????}

????
/**
?????*?根据条件设置query的值
?????*?
?????*?
@author?和
?????*?
@param?query
?????*????????????一个hibernate的Query对象
?????*?
@param?condition
?????*????????????查询的条件
?????*?
@return
?????*?
@version?1.0
?????
*/
????
private?void?setParameter(Query?query, UserFindCondition?condition)?{

????????
if?(condition.getUsername()?!=?null
????????????????
&&?!condition.getUsername().equals(""))?{
????????????query.setString(
"username",?"%"?+?condition.getUsername()
????????????????????
+?"%");
????????}

????????
if?(condition.getLoginid()?!=?null
????????????????
&&?!condition.getLoginid().equals(""))?{
????????????query.setString(
"loginid",?condition.getLoginid());
????????}

????????
if?(condition.getSex()?!=?null
????????????????
&&?!condition.getSex().equals(""))?{
????????????query.setString(
"sex",?condition.getSex());
????????}?????

????}

呵呵,笑死人了,这个方法很通用,我才在我的第二个项目当中才用到,真是可惜,当然了,使用Actionform有一个毛病就是对date类型要转换成STRING类型来处理,这是actionform的一个死穴。还有对Actionform不能够重置,只能够回来从前。不知道这群设计者怎么想的,真是由于这一点,所以我们有必要使用最原始的方法来解决问题了。使用页面当中的input,我们来拼request如何?
?? 二、利用JSTL做为表现而实现的查询功能
???? 步骤:在JSP页面布置很多的input,当然,你可以加入value了。(省略了...)
?????????? 创建查询条件的序列化对象(同样user.java)
?????????? 在action当中拼个condition了,做为查询条件,后面的处理类同第一种方式。
?????UserSearchCondition?userSearchCondition?=?null;
?????userSearchCondition?
=?makeUserSearchCondition(request);

private UserSearchCondition?makeUserSearchCondition(HttpServletRequest?request)?throws?Exception{
???????
UserSearchCondition userSearchCondition?=?new?OrderSearchCondition();
????????String username
=?request.getParameter("Username");
????????String loginid
=?request.getParameter("Loginid");
????????String sex
=?request.getParameter("Sex");??
???????

????????????????
????????
if(username!=?null?&&?!username.trim().equals("")){
???????????
usernameSearchCondition.setUsername(username);
????????}
????????
????????
if(loginid? !=?null?&&?!loginid.trim().equals("")){
??????????? userSearchCondition.set
Loginid (loginid );
????????}
????????
????????
if(sex !=?null?&&?!sex.trim().equals("")){????????
??????????? userSearchCondition.setSex(
sex);
????????}??????

????????
????????
return userSearchCondition;
????}

???? 以后的方法,我就不用再做举例了吧,可以参考如上第一种方法的实现.
???? 第二种方法的好处就是:在页面上比较好控制,比如重置,又比如日期性数据等。
???? (所有过程当中的代码没有经过测试,只是说明这种方法而已)
ruby , rails, java 平台:【上一篇】
hibernate的延迟加载通用方法:【下一篇】
【相关文章】
  • struts 笔记
  • (转贴)将Hibernate与Struts结合
  • 将Hibernate和Struts进行完美结合
  • 值得一看的Struts入门教程
  • Struts程序设计之HelloWord实战入门篇
  • 如何在VS2005中开发ATL服务器
  • Web显示层技术评估;Iterator vs Visitor, Pull vs Push
  • SSH(Spring + Struts + Hibernate)小试 之一
  • HttpRuntime.Cache vs. HttpContext.Current.Cache
  • Elicpse+Struts实现数据分页显示
  • 【随机文章】
  • Cisco路由器安全配置必用10条命令
  • 在CEGUI当中使用layout文件(1)
  • 完美解决动态二级下拉菜单联动问题(1)
  • linux内核防synflood
  • Linux之父表态支持DRM技术 称可提高安全性
  • CCNA专业词汇全集
  • 第一个xajax实例-验证用户名是否已经注册
  • 硬盘引导型故障判断
  • 在线编辑器FCKeditor 2.0试用小记 zt
  • Order by 的数值型灵活使用
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.