通過查看代碼和資料,我發現這個問題的解決方法其實非常簡單。只要把帶缺省值參數的SqlDateConverter重新註冊一下,覆蓋原有的註冊信息就可以了,這個註冊語句一般是寫在系統初試化的地方,對於Struts應用程序,當然做在PlugIn裏最方便。代碼如下:
import javax.servlet.ServletException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.SqlDateConverter;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
public class ConverterPlugIn implements PlugIn{
public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {
ConvertUtils.register(new SqlDateConverter(null),java.sql.Date.class);
}
public void destroy() {
ConvertUtils.deregister();
}
}
注意SqlDateConverter的構造方法是帶有參數null的,這表示遇到不能解析的字符串就返回空值。而deregister()方法的作用是恢復ConvertUtils的缺省註冊表。爲了使這個PlugIn起作用,要在struts-config.xml裏增加一句話:
日期字段往往會給我們的開發帶來麻煩,其實在Struts應用程序裏,只要把這些轉換類搞熟了,總可以找到很方便的辦法。常見的問題還有如何指定日期輸入格式,怎樣處理java.util.Date的轉換,等等,在這個鏈接裏有解決這些問題的方法,道理都是一樣的。