posts - 73,  comments - 55,  trackbacks - 0

          一、使用struts表單驗證而不用struts標(biāo)簽的方法:
          使用struts標(biāo)簽時:
          <html:javascript formName="loginForm" dynamicJavascript="true" staticJavascript="false" />

          <html:form action="login" onsubmit="return validateLoginForm(this);">
          ?<input type="text" name="account.accountId"/>
          ?<input type="password" name="account.password"/>
          ?<INPUT type="submit" value="提交">
          ?<input type="reset" value="清空">
          </html:form>

          改成html標(biāo)簽后:
          <html:javascript formName="loginForm" dynamicJavascript="true" staticJavascript="false" />

          <form action="login.do" name="loginForm"?onsubmit="return validateLoginForm(this);">
          <input type="text" name="account.accountId" size="16" style="width:120;height:23"/>
          <input type="password" name="account.password" size="16" style="width:120;height:23" />
          <INPUT type="submit" value="提交">
          <input type="reset" value="清空">
          </form>

          二、動態(tài)表單知識
          ? <form-bean>的<form-property>子元素用來設(shè)置動態(tài)ActionForm的屬性。<form-property>元素的name屬性指定屬性名,type指定屬性類型,可以把動態(tài)ActionForm的屬性設(shè)為以下Java類型:

          · java.lang.BigDecimal

          · java.lang.BigInteger

          · java.lang.Boolean

          · java.lang.Byte

          · java.lang.Character

          · java.lang.Class

          · java.lang.Double

          · java.lang.Float

          · java.lang.Integer

          · java.lang.Long

          · java.lang.Short

          · java.lang.String

          · java.sql.Data

          · java.sql.Time

          · java.sql.Timestamp

          ??????如果表單的字段值為Java基本類型,在配置時應(yīng)該用響應(yīng)的包裝類型來代替,例如int類型的包裝類型為Integer。如果屬性為Java基本類型,應(yīng)該把屬性設(shè)置為相應(yīng)的Java包裝類型。
          ??????DynaActionForm基類提供了initialize()方法,它把表單的所有屬性恢復(fù)為默認(rèn)值。表單屬性默認(rèn)值由<form-bean>的<form-property>子元素的initial屬性來決定。如果沒有設(shè)置initial屬性,則表單屬性的默認(rèn)值由其Java類型來自動決定,例如對象類型的默認(rèn)值為null,整數(shù)類型的默認(rèn)值為0,boolean類型的默認(rèn)值為false,date類型的默認(rèn)值為當(dāng)天。

          三、用到spring框架后action都是繼承org.springframework.web.struts.DispatchActionSupport,DispatchActionSupport類里有
          1)Log log,所以在action中可直接寫:log.info("Get a Bean named:Object");
          2)protected void onInit(){};//創(chuàng)建action對象時先執(zhí)行此方法。
          3)protected void onDestroy(){};//回收action對象時先執(zhí)行此方法

          四、Tiles框架用法見《精通struts》第十六章。
          詳細(xì)步驟:P397
          當(dāng)編譯Index.jsp時如果錯誤信息為: javax.servlet.jsp.JspException: ServletException in '/Layout.jsp': ServletException in

          'common/CatalogsBar.jsp': null
          其中Layout.jsp為模板,common/CatalogsBar.jsp為Index.jsp其中一部分,這個信息表名不是'common/CatalogsBar.jsp'找不到,而是它內(nèi)部

          有空引用異常,單獨編譯該文件得到具體錯誤信息:
          java.lang.NullPointerException at _common._CatalogsBar_2e_jsp._jspService(CatalogsBar.jsp:11) [/common/CatalogsBar.jsp] 表名

          在第11行有空引用。

          五、國際化
          1.開發(fā)和編譯代碼時指定字符集為UTF-8。JBuilder和Eclipse都可以在項目屬性中設(shè)置。
          2.使用過濾器,如果所有請求都經(jīng)過一個Servlet控制分配器,那么使用Servlet的filter執(zhí)行語句,將所有來自瀏覽器的請求(request)轉(zhuǎn)換為UTF-8,因為瀏覽器發(fā)過來的請求包根據(jù)瀏覽器所在的操作系統(tǒng)編碼,可能是各種形式編碼。關(guān)鍵一句:
          request.setCharacterEncoding("UTF-8")。
          3.在JSP頭部聲明:<%@ page contentType="text/html;charset= UTF-8" %>。
          在Jsp的html代碼中,聲明UTF-8:
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          4.設(shè)定數(shù)據(jù)庫連接方式是UTF-8。例如連接MYSQL時配置URL如下:
          jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
          注意,上述寫法是JBoss的mysql-ds.xml寫法,多虧網(wǎng)友提示,在tomcat中&amp;要寫成&即可。一般其他數(shù)據(jù)庫都可以通過管理設(shè)置設(shè)定UTF-8
          其他和外界交互時能夠設(shè)定編碼時就設(shè)定UTF-8,例如讀取文件,操作XML等。
          ?
          六、表單驗證:
          1、驗證的配置是在validation.xml中,驗證規(guī)則的配置是在validator-rules.xml與validator-rules-user.xml中.

          七、action中轉(zhuǎn)url的方式:
          1。轉(zhuǎn)到.jsp頁面:
          return mapping.findForward("***");//***指struts-config中定義好的forward項。
          forward項有兩個選項,默認(rèn)都為false,說明如下:
          contextRelative——是否是相對目錄。(如現(xiàn)頁面為business/input.jsp,轉(zhuǎn)到action后forward項到business/result.jsp,如果contextRelative為false,則轉(zhuǎn)到鏈接business/business/result.jsp,所以此選項最好勾上)
          redirect——是否重定向,即是否包含request信息。
          2。返回上頁顯示出錯信息:
          this.saveErrors(request,errors);
          return this.***(mapping,form,request,response);//***指本action的一個方法,為了轉(zhuǎn)到上個頁面顯示出錯信息
          3。轉(zhuǎn)到本action的其他方法:
          ActionForward forward = new ActionForward();
          forward.setPath(mapping.getPath() + ".do?method=****&***);
          forward.setRedirect(true););//用此方法則間接跳轉(zhuǎn),即不帶request信息,不加此
          //方法會保留request信息
          return forward;


          八、處理日期類型
          struts使用日期包括將string自動轉(zhuǎn)化為日期fill到form中,以及將form中的日期按照指定格式顯示在html的textfield中。首先講第一種情況的解決方法:

          創(chuàng)建如下類:

          import?java.util.*;
          import?org.apache.commons.beanutils.*;
          import?java.text.SimpleDateFormat;

          public?class?DateConvert?implements?Converter
          {
          ??static?SimpleDateFormat?df?=?new?SimpleDateFormat("yyyy/MM/dd");
          ??public?DateConvert()
          ??{

          ??}
          ??public?Object?convert(Class?type,?Object?value)
          ??{
          ????
          ????if(value==null)return?null;
          ????if(((String)value).trim().length()==0)?return?null;

          ????if(value?instanceof?String)
          ????{
          ??????try
          ??????{
          ????????return?df.parse((String)value);
          ??????}
          ??????catch?(Exception?ex)
          ??????{
          ????????throw?new?ConversionException("輸入的日期類型不合乎yyyy/MM/dd"
          ??????????+?value.getClass());
          ??????}

          ????}
          ????else
          ????{
          ??????throw?new?ConversionException("輸入的不是字符類型"+value.getClass());
          ????}

          ??}
          }

          然后在你的系統(tǒng)某出使用如下(如web的init方法)
          ConvertUtils.register(new?DateConvert(),java.util.Date.class);
          參數(shù)用于表示DateConvert類負(fù)責(zé)處理java.util.Date類型的轉(zhuǎn)化

          第二種情況是如何顯示form中日期類型到html:text中,我用的辦法是修改struts的代碼,重新生成一個新的struts.jar
          org.apache.struts.taglib.html.BaseFieldTag的doStartTag的方法
          找到?if?(value?!=?null)?{results.append(ResponseUtils.filter(value))代碼行下面的內(nèi)容,需要修改此處代碼,以便輸出日期類型
          如下:
          if?(value?!=?null)?{
          ????????????results.append(ResponseUtils.filter(value));
          ????????}?else?if?(redisplay?||?!"password".equals(type))?{
          ????????????Object?value?=?RequestUtils.lookup(pageContext,?name,?property,?null);
          ????????????//System.out.println("lijz?"+value);

          ????????????if(value?instanceof?java.util.Date)
          ????????????{
          ???????????????//System.out.println("date="+value);

          ???????????????if?(value?==?null)
          ???????????????????value?=?"";
          ????????else
          ????????{
          ??????????java.util.Date?d=?(java.util.Date)value;
          ??????????try
          ???????????{

          ????????????results.append(ResponseUtils.filter(df.format(d)));
          ??????????}
          ??????????catch(Exception?ex)
          ??????????{
          ????????????System.out.println("form?error:"+ex.getMessage());
          ??????????}
          ??????????}
          ????????????}
          ???????????else
          ???????????{
          ???????????????if?(value?==?null)
          ????????????????value?=?"";
          ????????????????results.append(ResponseUtils.filter(value.toString()));
          ???????????}
          ???????????
          ???????}
          ????????results.append("\"");
          ????????results.append(prepareEventHandlers());
          ????????results.append(prepareStyles());
          ????????results.append(getElementClose());

          ????????//?Print?this?field?to?our?output?writer

          ????????ResponseUtils.write(pageContext,?results.toString());

          ????????//?Continue?processing?this?page

          ????????return?(EVAL_BODY_TAG);??????
          ?
          ?重新編譯struts成struts.jar.放到你需要的項目中

          posted on 2006-07-07 11:00 保爾任 閱讀(759) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 大同市| 峨山| 巢湖市| 通许县| 嘉定区| 永昌县| 尚义县| 敦化市| 安徽省| 惠东县| 长兴县| 华安县| 三河市| 永宁县| 南丰县| 定兴县| 纳雍县| 江都市| 吉林市| 湛江市| 滦南县| 常德市| 油尖旺区| 淮北市| 白水县| 屯留县| 灌云县| 高州市| 大新县| 华池县| 绥芬河市| 忻城县| 德安县| 庆云县| 垦利县| 二连浩特市| 开阳县| 聊城市| 固镇县| 彰化市| 天等县|