J2EE劍俠行

          直覺我的J2EE應用生涯,打造我心中的一把利劍。

          常用鏈接

          統計

          技術鏈接

          最新評論

          struts表單 vs JSTL表現之多條件查詢示例

          ??? 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;
          ????}

          ???? 以后的方法,我就不用再做舉例了吧,可以參考如上第一種方法的實現.
          ???? 第二種方法的好處就是:在頁面上比較好控制,比如重置,又比如日期性數據等。
          ???? (所有過程當中的代碼沒有經過測試,只是說明這種方法而已)

          posted on 2006-07-21 11:20 @家軍 閱讀(2722) 評論(1)  編輯  收藏 所屬分類: J2EE技術類

          評論

          # re: struts表單 vs JSTL表現之多條件查詢示例[未登錄] 2008-05-23 12:00 aa

          qqq  回復  更多評論   

          主站蜘蛛池模板: 莲花县| 临泉县| 怀仁县| 周宁县| 胶州市| 英超| 西丰县| 十堰市| 佛学| 镇巴县| 中阳县| 开封市| 德保县| 股票| 鞍山市| 泸水县| 阳城县| 邯郸市| 密山市| 化德县| 绥中县| 平利县| 洮南市| 唐山市| 泾川县| 绵竹市| 卓尼县| 广西| 田东县| 安泽县| 雷波县| 丽水市| 长阳| 龙门县| 襄汾县| 柳河县| 台中县| 东莞市| 高要市| 忻城县| 象州县|