zoukankan      html  css  js  c++  java
  • struts学习笔记(不断更新)

    一、使用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="120;height:23"/>
    <input type="password" name="account.password" size="16" style="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.放到你需要的项目中 
  • 相关阅读:
    Computer Browser服务自动停止
    Group By中Case分类统计
    C#判断网络状态
    Win7中VC6打开文件报错(转)
    SqlBulkCopy(大数据量拷贝)
    vc6开发ActiveX并发布全攻略(二)(转)
    VC6 Activex控件调试
    VC MessageBox
    常用基本AT指令
    WinForm自动重启
  • 原文地址:https://www.cnblogs.com/wjlstation/p/2592159.html
Copyright © 2011-2022 走看看