1. 程式人生 > >關於springmvc中註解@ModelAttribute的bean(物件引數)問題

關於springmvc中註解@ModelAttribute的bean(物件引數)問題

環境:jdk6 sping3.2.3  oracle10g

問題闡述:

我通過jsp提交一個表單,然後通過js方法$('#id').submit()函式,提交表單,通過post提交表單如下:


我在springmvc的controller接受時,如下:

顯然  我是通過bean物件來接受的,這很便利,但大家一定要注意:如果這個bean中有String 和int  沒啥問題,如果包含long的型別(其他型別沒測過)時,問題就出來了,

你通過測試發現  :js函式會觸發submit()函式,但是就是不進入這個controller裡,所以我的解決辦法是把long改為String,之所以不用int,是應為庫裡的number很大,int根本接收不了,所以bean內部的寫法 應該改為String .

         如果你的bean實現了RowMapper介面,必須要實現:

public Object mapRow(ResultSet rs, int arg1) ;介面,如果你bean的型別改為 String,而庫裡本身是number(20)或更大,那麼這個介面對於這個欄位的介面顯然應該改為:

MyBean o = new MyBean();
o.setOrderIndx(String.valueOf(rs.getLong("xxx")));
當時 我這個改了,我很擔心底層jdbcTemplate的update函式會有問題,畢竟bean的型別變了,可能會影響sql的拼寫。

運行了一下,CRUD沒有問題,我很好奇的去dao層看了下,形式如下:

public void addMyBean(MyBean o) {
		String insert_sql="insert into xxTableName(name1,name2)";
		Object[] objects = new Object[]{o.getName1(),o.getName2()};
		jdbcTemplate.update(insert_sql,objects );
}

我發現即便我的那個Bean屬性是String,而對應庫欄位是number,這個方法依然沒有問題。updatesql依然如此,我就不寫了。看來spring做了很多事情啊,感覺世界又更和諧許多。。。僅此提醒自己