posts - 73,  comments - 55,  trackbacks - 0

          一、使用struts表單驗證而不用struts標簽的方法:
          使用struts標簽時:
          <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標簽后:
          <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>

          二、動態表單知識
          ? <form-bean>的<form-property>子元素用來設置動態ActionForm的屬性。<form-property>元素的name屬性指定屬性名,type指定屬性類型,可以把動態ActionForm的屬性設為以下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基本類型,在配置時應該用響應的包裝類型來代替,例如int類型的包裝類型為Integer。如果屬性為Java基本類型,應該把屬性設置為相應的Java包裝類型。
          ??????DynaActionForm基類提供了initialize()方法,它把表單的所有屬性恢復為默認值。表單屬性默認值由<form-bean>的<form-property>子元素的initial屬性來決定。如果沒有設置initial屬性,則表單屬性的默認值由其Java類型來自動決定,例如對象類型的默認值為null,整數類型的默認值為0,boolean類型的默認值為false,date類型的默認值為當天。

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

          四、Tiles框架用法見《精通struts》第十六章。
          詳細步驟:P397
          當編譯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'找不到,而是它內部

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

          在第11行有空引用。

          五、國際化
          1.開發和編譯代碼時指定字符集為UTF-8。JBuilder和Eclipse都可以在項目屬性中設置。
          2.使用過濾器,如果所有請求都經過一個Servlet控制分配器,那么使用Servlet的filter執行語句,將所有來自瀏覽器的請求(request)轉換為UTF-8,因為瀏覽器發過來的請求包根據瀏覽器所在的操作系統編碼,可能是各種形式編碼。關鍵一句:
          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.設定數據庫連接方式是UTF-8。例如連接MYSQL時配置URL如下:
          jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8
          注意,上述寫法是JBoss的mysql-ds.xml寫法,多虧網友提示,在tomcat中&amp;要寫成&即可。一般其他數據庫都可以通過管理設置設定UTF-8
          其他和外界交互時能夠設定編碼時就設定UTF-8,例如讀取文件,操作XML等。
          ?
          六、表單驗證:
          1、驗證的配置是在validation.xml中,驗證規則的配置是在validator-rules.xml與validator-rules-user.xml中.

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


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

          創建如下類:

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

          ??}
          }

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

          第二種情況是如何顯示form中日期類型到html:text中,我用的辦法是修改struts的代碼,重新生成一個新的struts.jar
          org.apache.struts.taglib.html.BaseFieldTag的doStartTag的方法
          找到?if?(value?!=?null)?{results.append(ResponseUtils.filter(value))代碼行下面的內容,需要修改此處代碼,以便輸出日期類型
          如下:
          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)  編輯  收藏

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


          網站導航:
           

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

          常用鏈接

          留言簿(4)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 太谷县| 新营市| 秦安县| 温泉县| 郎溪县| 观塘区| 西峡县| 马龙县| 治多县| 渝北区| 会宁县| 都江堰市| 英吉沙县| 五常市| 积石山| 和静县| 阆中市| 土默特右旗| 长岭县| 贺兰县| 即墨市| 南和县| 曲靖市| 青田县| 霍州市| 河池市| 嘉义县| 慈溪市| 玉山县| 定安县| 民和| 务川| 邳州市| 平原县| 江门市| 京山县| 康定县| 蕉岭县| 鞍山市| 托克逊县| 吉林省|