Struts 1 中“日期型別”的表單資料處理
在表單中填寫日期是個很常見的情況。
在Struts 1的ActionForm中,可以根據要提交的表單資料建立對應的ActionForm Bean屬性,屬性的型別支援Java的基本資料型別及其包裝類,還有字串,也就是說如果你將ActionForm Bean的屬性型別設為(int),Struts會自動將無法正常轉換為int型別的資料都轉換為0(如果屬性型別為包裝類,則可能得到null),可以用於實現第一層次的表單資料過濾。
但是我們應該明白,表單資料本質上全部都是文字字元,Struts只不過是幫我們做了一步自動轉換。當然只是簡單的資料型別轉換,但如將一個字串"2007-12-5"轉換為java.util.Date型別,Struts則沒有提供直接的支援了,再說日期字串的解析本身就是一個情況複雜的事情,因為這個“日期字串”也沒有固定的模式(當然我們最常見的模式在Java中應該是"yyyy-MM-dd"了)。
於是我們若要在表單中處理日期型別的資料,必須自己設計一種解決方案。
方案1:在ActionForm Bean中,日期直接當作字串處理。
這樣做的話,在每次從ActionForm Bean中取資料時,都需要手動進行一次日期字串的解析,非常麻煩
方案2:在ActionForm Bean中,對應表單的屬性型別仍作字串處理,但提供一對輔助Getter/Setter方法,分別提供對此屬性的解析/格式化處理。
這樣做又能保持ActionForm Bean的相容性(所有的屬性資料型別都是Struts自動轉換所支援的),又能很方便地取得解析後的日期型別的資料。
方案3:直接提供java.util.Date型別的屬性及其Getter/Setter。但是這樣做在提交表單的時候會出錯,因為Struts無法將一個字串引數傳給一個需要java.util.Date型別引數的Setter。所以我們稍作改造,將Setter引數型別改為java.lang.String,並在其方法體中進行日期字串的解析。
下面比較一下3種方案的利弊:
方案1做法沒有什麼不妥,就是麻煩了點。當然如果你的專案不大,處理資料時直接採用SQL語句,或者是資料庫中本來就是使用VARCHAR等型別來儲存“日期”的,那麼這樣做也可以,無需進行型別解析轉換。
方案2則優點較多:屬性本身採用字串型別,能夠儲存表單提交的原始資料。需要日期型別時只需根據情況呼叫輔助用的Getter,呼叫輔助用Setter時,又可以自動格式化日期字串。同時仍然可以使用屬性原配的Getter/Setter來處理實際提交的字串。不足之處:對應每個日期屬性都需要多增加兩個方法(不過是一次編寫,可反覆呼叫:),然後日期的解析是否會帶來執行效率問題?(我感覺幾乎可以完全忽略……)
方案3只是效果能夠實現,缺點多多:表單提交的原始資料丟失,因為在呼叫Setter的時候便進行了解析,如果解析不成功,我們必須要捨棄非法格式的資料,並給日期型別的屬性對應的成員變數一個“預設值”,那麼這個“預設值”使用什麼好呢?null?1900-1-1?這裡可不能丟擲異常,否則Struts在提交表單的時候問題可大了。還有你見過Getter和Setter型別不一致的Bean屬性嗎?好像不符合規範,又讓人感覺怪怪的,很是罪過,我們要剔除掉奇怪的程式碼以免影響開發人員的心情!
最後,因為方案2儲存了原始資料,所以可以很方便地在validate方法中判斷原始輸入是否合法;而方案3則難以處理判斷了,因為它在Set的時候就已經把原始資料給過濾了。
有人說Struts配套的外掛Validator框架?那個我就不考慮了,它預設的日期模式是“yyyy/MM/dd”不合我意,然後其驗證過程仍然是呼叫Getter然後解析字串,並不能給我提供將字串轉換為日期的便利方式。
所以我推薦方案2!
ps:日期的解析和格式化請參考“java.text.SimpleDateFormat”
相關推薦
Struts 1 中“日期型別”的表單資料處理
在表單中填寫日期是個很常見的情況。 在Struts 1的ActionForm中,可以根據要提交的表單資料建立對應的ActionForm Bean屬性,屬性的型別支援Java的基本資料型別及其包裝類,還有字串,也就是說如果你將ActionForm Bean的屬性型別設為(int
javaWeb 中前端Form表單資料處理(手動拼json)
在前端我們會用到最多的就是form表單提交資料,在form表單中有很多都是自動將資料傳到後臺,然後通過實體來接受的,但是有的時候我們就是需要在前端就拿到這個Form表單的資料,這是我們就可以自己講資料
1、Jquery form表單ajax提交 2、jquery.filter校驗多個相同型別的文字框是否輸入資料有重複
JSP引用該JS <script type="text/javascript" src="http://malsup.github.com/jquery.form.js"></script> 表單儲存按鈕 onclick=save(); func
layer.open彈框中的表單資料無法獲取
layer.open彈框中的表單資料無法獲取 表單資料模板 layer.open() 頁面效果: 當點選確定後,radio和textarea獲取的值總是為空,解決辦法: var setPriCustByCallPhone = $('#setPr
JavaWeb:Controller中獲取Form表單提交的資料的方式
Controller中獲取Form表單提交的資料的方式 新增HttpServletRequst型別入參,通過HttpServletRequst.getParameter()獲取請求資料 @RequestMapping(value="/user/save", meth
struts2中模型化獲取表單資料
class屬性:action全路徑,對應伺服器的路徑 method屬性:action裡面預設執行的方法execute
React中Form表單資料獲取
const { getFieldDecorator } = this.props.form; this.getFieldsValue = this.props.form.getFieldsValue;//獲得表單所有控制元件的值 this.props.form.getFieldsValue(
自動為瀏覽器中複製出來的表單資料加上單引號與冒號
做爬蟲的朋友,這個很麻煩。 首先啊,全選將資料複製到editplus,或其它的編輯器中,這裡用editplus,然後,兩個(.*?)之間的是鍵值的分隔符: ^(.*?) (.*?)$ '$1':'$2' 正則的規則,不懂的可以問我。 kouk
Atitit 面試技術點最小化問題法總結 目錄 1. Web 前端 1 1.1. Jq 常用操作哪些?? 1 1.2. 查詢後如何繫結後端資料到表格 2 1.3. 提交後怎麼接受表單資料 2 2.
Atitit 面試技術點最小化問題法總結 目錄 1. Web 前端 1 1.1. Jq 常用操作哪些?? 1 1.2. 查詢後如何繫結後端資料到表格 2 1.3. 提交後怎麼接受表單資料 2 2. Mvc Springmvc 2 2.1
使用ant design的modal中嵌入form表單,動態獲取資料
最近在做一個公司的專案,使用的是react然後用了ant design,在做一個功能的時候使用了modal,modal裡面還嵌套了一個子元件,就想子元件裡的id能動態獲取然後從介面拉資料,但是始終不行因為componentWillMount這個只進去的時候會渲染,後
POI 將按日期分表的資料彙總到一個excel中 大資料量
一. 簡介 現在有按時間分的使用者表,要在每月一號將這些表的資料彙總到一個excel中。每張表的資料量很大。 昨天通宵搞得,只為紀念,方便以後遇見同樣的需求做參考。 之前是想著每天匯出一個excel, 然
淺談web工程中BeanUtils的封裝MyBeanUtils,populate方法使用 【接收前端form表單資料】
宣告本測試使用JDK9,Tomcat9.0.10 ,IDEA2018.2 ; 淺談 BeanUtils 的封裝 , BeanUtils 類中方法 populate (Object be
關於《JavaWeb開發實戰經典》中接收封裝表單的文字資料出現中文亂碼問題的解決方法
smartupload亂碼問題 今天在寫smartupload的demo時,在接收表單資料時出現了中文亂碼,從網上綜合了各種方法才得以解決。 1.smartupload.html中可見對form使用enctype進行表單封裝 <!DOCTYPE html&
Servlet中如何獲取使用者提交的查詢引數或表單資料?
可以通過請求物件(HttpServletRequest)的getParameter()方法通過引數名獲得引數值。如果有包含多個值的引數(例如複選框),可以通過請求物件的getParameterValue
前端頁面中把form表單中的資料轉換為json格式
$.fn.serializeJson=function(){ var serializeObj={}; var array=this.serializeArray(); var str=th
解決form表單資料提交不到servlet中去的問題
servlet用的baseservlet繼承,反射獲取url地址中的method的地址 @WebServlet("/orders") public class OrderServlet extends BaseServlet{ // 3.增加配送通知單
jQuery使用serialize(),serializeArray()方法取得表單資料+字串和物件型別兩種表單提交的方法
原始form表單值獲取方式(手動):$.ajax({ type: "POST", url: "ajax.php", data: "Name=摘取天上星&position=IT技
Angular 開發小妙招1:提交表單資料驗證不通過,更改輸入元件的樣式
開發表單時,客戶端資料完整性校驗是必不可少的,在jquery 時代出現了無數的資料驗證外掛也很好用,開發Angular 應用時,angular 內建了一些常用的資料驗證指令。今天要講的不是這些指令如何使用,今天講什麼呢,今天講一些關於驗證樣式的問題,相關的基礎知識在angular.cn 官方文件中都有介紹,在
提交表單資料,在IE及其它瀏覽器中亂碼的解決方案
如在IE下提交表單資料亂碼: 解決方案: 在form表單中新增 onsubmit="document.charset='GBK';" 【注編碼根據各自環境條件指定】 如在其它瀏覽器下提交表單資料亂碼: acce
Java中,當表單含有檔案上傳時,提交資料的如何讀取(吐血版)
int TeamId = 0;// 用於存放輸出的資訊String message = "";// 在自己的專案中構造出一個用於存放使用者照片的資料夾String projectpath = this.getServletContext().getRealPath("/he