關於springmvc中註解@ModelAttribute的bean(物件引數)問題
阿新 • • 發佈:2019-01-07
環境: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做了很多事情啊,感覺世界又更和諧許多。。。僅此提醒自己