程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 層層遞進Struts1(六)自定義轉換器

層層遞進Struts1(六)自定義轉換器

編輯:關於JAVA

Struts提供的類型轉換有限,如果我們強行使用沒有的類型轉換,則會出現錯誤,以Date類型為例:

org.apache.catalina.core.StandardWrapperValve invoke  
嚴重: Servlet.service() for servlet action threw exception  
      
java.lang.IllegalArgumentException: Cannot invoke 

com.tgb.struts1.TypeCovertActionForm.setUtilDate - argument type mismatch

在此我們來建立 java.util.Date的轉換器。

Servlet版    Converter

數據轉換器,代碼如下:

package com.tgb.struts1;  
      
import java.text.SimpleDateFormat;  
import java.util.Date;  
      
import org.apache.commons.beanutils.ConversionException;  
      
import com.sun.org.apache.commons.beanutils.Converter;  
      
public class UtilDateConverter implements org.apache.commons.beanutils.Converter {  
      
    public Object convert(Class type, Object value) {  
      
      
        if (value instanceof Date) {  
            return (value);  
        }  
        Date date=null;  
    if (value instanceof String) {  
        try {  
            date=new SimpleDateFormat("yyy-MM-dd").parse((String)value);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        }  
    return date;  
    }  
}

Servlet

為的是將上面的轉換器注冊到ConvertUtils中:

package 

com.tgb.struts1;  
      
import javax.servlet.ServletException;  
import javax.servlet.http.HttpServlet;  
      
import org.apache.commons.beanutils.ConvertUtils;  
      
public class UtilServlet extends HttpServlet {  
          
    public void init()throws ServletException  
    {  
            ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);  
    }  
}

配置文件

在web.xml中添加配置,因為轉換器在Tomcat啟動之時就加載,所以此處要將 load-on-startup設置為大於0的值:

<servlet>  
        <servlet-name>UtilServlet</servlet-name>  
        <servlet-class>com.tgb.struts1.UtilServlet</servlet-class>  
        <load-on-startup>10</load-on-startup>  
  </servlet>

測試

jsp

<h4>測試struts的轉換器</h4>  
<form action="typeconvert.do" method="post" >  
    int value:<input type="text"  name="intValue" /> <br/>  
    double value:<input type="text"  name="doubleValue" /> <br/>  
    boolean value:<input type="text"  name="booleanvVlue" /> <br/>  
    java.sql.date:<input type="text"  name="sqlDate" /> <br/>  
    java.util.date:<input type="text"  name="utilDate" /> <br/>  
    <input type="submit"  value="提交" /> <br/>  
</form>

結果

plugin版

plugin

package com.tgb.struts1;  
      
import javax.servlet.ServletException;  
      
import org.apache.commons.beanutils.ConvertUtils;  
import org.apache.struts.action.ActionServlet;  
import org.apache.struts.action.PlugIn;  
import org.apache.struts.config.ModuleConfig;  
      
public class UtilDateConverterPlugin implements PlugIn {  
      
    public void destroy() {  
        // TODO Auto-generated method stub  
    }  
    public void init(ActionServlet servlet, ModuleConfig config)  
            throws ServletException {  
        ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);  
    }  
}

配置文件

在struts-config中放入:

<plug-in 

className="com.tgb.struts1.UtilDateConverterPlugin" />

測試結果

總 結

在此體會到面向抽象編程所帶來的可擴展的好處,這篇博客中的兩個自定義的轉換器過程基本一致 :實現接口寫出轉換器、更改配置文件保證可以在Tomat加載即注冊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved