spring如何處理表單數據

        在處理表單類數據的時候,之前處理過一個表單裏面有20條類似的數據,針對這些數據都是通過一個一個的變量進行輸入的,一條數據有5個值,20條數據100個值,在controller中的參數中設置100個參數,哦,my god,好讓人崩潰,但是確實就這麼幹了一回,下面是寫的參數:

 @RequestMapping("/baojia/savebjxx")
    @ResponseBody
	public Map<String,Object> savebjxx(@RequestParam("sffg") String sffg,@RequestParam("syxqbrq") String syxqbrq,@RequestParam("jqxqbrq") String jqxqbrq,@RequestParam("jqxbf") String jqxbf,@RequestParam("ccs") String ccs,@RequestParam("jqxqnzbrq") String jqxqnzbrq,@RequestParam("jqxdqts") String jqxdqts,
			@RequestParam("clssxischoice") String clssxischoice,@RequestParam("clssxbe") double clssxbe,@RequestParam("clssxbf") double clssxbf,@RequestParam("clssxisvalid") String clssxisvalid,@RequestParam("clssxisvote") String clssxisvote,
			@RequestParam("qcdqischoice") String qcdqischoice,@RequestParam("qcdqxbe") double qcdqxbe,@RequestParam("qcdqxbf") double qcdqxbf,@RequestParam("qcdqxisvalid") String qcdqxisvalid,@RequestParam("qcdqxisvote") String qcdqxisvote,
			@RequestParam("sydszzrischoice") String sydszzrischoice,@RequestParam("sydszzrxbe") double sydszzrxbe,@RequestParam("sydszzrxbf") double sydszzrxbf,@RequestParam("sydszzrxisvalid") String sydszzrxisvalid,@RequestParam("sydszzrxisvote") String sydszzrxisvote,
			@RequestParam("sjzwzrxischoice") String sjzwzrxischoice,@RequestParam("sjzwzrxbe") double sjzwzrxbe,@RequestParam("sjzwzrxbf") double sjzwzrxbf,@RequestParam("sjzwzrxisvalid") String sjzwzrxisvalid,@RequestParam("sjzwzrxisvote") String sjzwzrxisvote,
			@RequestParam("ckzwzrxischoice") String ckzwzrxischoice,@RequestParam("ckzwzrxbe") double ckzwzrxbe,@RequestParam("ckzwzrxbf") double ckzwzrxbf,@RequestParam("ckzwzrxisvalid") String ckzwzrxisvalid,@RequestParam("ckzwzrxisvote") String ckzwzrxisvote,
			@RequestParam("cshhsxischoice") String cshhsxischoice,@RequestParam("cshhsxbe") double cshhsxbe,@RequestParam("cshhsxbf") double cshhsxbf,@RequestParam("cshhsxisvalid") String cshhsxisvalid,@RequestParam("cshhsxisvote") String cshhsxisvote,
			@RequestParam("blddpsxischoice") String blddpsxischoice,@RequestParam("blddpsxbe") double blddpsxbe,@RequestParam("blddpsxbf") double blddpsxbf,@RequestParam("blddpsxisvalid") String blddpsxisvalid,@RequestParam("blddpsxisvote") String blddpsxisvote,
			@RequestParam("ssxischoice") String ssxischoice,@RequestParam("ssxbe") double ssxbe,@RequestParam("ssxbf") double ssxbf,@RequestParam("ssxisvalid") String ssxisvalid,@RequestParam("ssxisvote") String ssxisvote,
			@RequestParam("zrssxischoice") String zrssxischoice,@RequestParam("zrssxbe") double zrssxbe,@RequestParam("zrssxbf") double zrssxbf,@RequestParam("zrssxisvalid") String zrssxisvalid,@RequestParam("zrssxisvote") String zrssxisvote,
			@RequestParam("dcjcdddsssischoice") String dcjcdddsssischoice,@RequestParam("dcjcdddsssbe") double dcjcdddsssbe,@RequestParam("dcjcdddsssbf") double dcjcdddsssbf,@RequestParam("dcjcdddsssisvalid") String dcjcdddsssisvalid,@RequestParam("dcjcdddsssisvote") String dcjcdddsssisvote,
			@RequestParam("dsftyxischoice") String dsftyxischoice,@RequestParam("dsftyxbe") double dsftyxbe,@RequestParam("dsftyxbf") double dsftyxbf,@RequestParam("dsftyxisvalid") String dsftyxisvalid,@RequestParam("dsftyxisvote") String dsftyxisvote,
			@RequestParam("bjmpcsxischoice") String bjmpcsxischoice,@RequestParam("bjmpcsxbe") double bjmpcsxbe,@RequestParam("bjmpcsxbf") double bjmpcsxbf,@RequestParam("bjmpcsxisvalid") String bjmpcsxisvalid,@RequestParam("bjmpcsxisvote") String bjmpcsxisvote,
			@RequestParam("bjmpszxischoice") String bjmpszxischoice,@RequestParam("bjmpszxbe") double bjmpszxbe,@RequestParam("bjmpszxbf") double bjmpszxbf,@RequestParam("bjmpszxisvalid") String bjmpszxisvalid,@RequestParam("bjmpszxisvote") String bjmpszxisvote,
			@RequestParam("bjmpjdcdqxischoice") String bjmpjdcdqxischoice,@RequestParam("bjmpjdcdqxbe") double bjmpjdcdqxbe,@RequestParam("bjmpjdcdqxbf") double bjmpjdcdqxbf,@RequestParam("bjmpjdcdqxisvalid") String bjmpjdcdqxisvalid,@RequestParam("bjmpjdcdqxisvote") String bjmpjdcdqxisvote,
			@RequestParam("bjmpsjxischoice") String bjmpsjxischoice,@RequestParam("bjmpsjxbe") double bjmpsjxbe,@RequestParam("bjmpsjxbf") double bjmpsjxbf,@RequestParam("bjmpsjxisvalid") String bjmpsjxisvalid,@RequestParam("bjmpsjxisvote") String bjmpsjxisvote,
			@RequestParam("bjmpckxischoice") String bjmpckxischoice,@RequestParam("bjmpckxbe") double bjmpckxbe,@RequestParam("bjmpckxbf") double bjmpckxbf,@RequestParam("bjmpckxisvalid") String bjmpckxisvalid,@RequestParam("bjmpckxisvote") String bjmpckxisvote,
			@RequestParam("bjmpcshhssxischoice") String bjmpcshhssxischoice,@RequestParam("bjmpcshhssxbe") double bjmpcshhssxbe,@RequestParam("bjmpcshhssxbf") double bjmpcshhssxbf,@RequestParam("bjmpcshhssxisvalid") String bjmpcshhssxisvalid,@RequestParam("bjmpcshhssxisvote") String bjmpcshhssxisvote,
			@RequestParam("bjmpzrssxischoice") String bjmpzrssxischoice,@RequestParam("bjmpzrssxbe") double bjmpzrssxbe,@RequestParam("bjmpzrssxbf") double bjmpzrssxbf,@RequestParam("bjmpzrssxisvalid") String bjmpzrssxisvalid,@RequestParam("bjmpzrssxisvote") String bjmpzrssxisvote,
			@RequestParam("bjmpssxischoice") String bjmpssxischoice,@RequestParam("bjmpssxbe") double bjmpssxbe,@RequestParam("bjmpssxbf") double bjmpssxbf,@RequestParam("bjmpssxisvalid") String bjmpssxisvalid,@RequestParam("bjmpssxisvote") String bjmpssxisvote,
			@RequestParam("bjmpdcjcdddshxischoice") String bjmpdcjcdddshxischoice,@RequestParam("bjmpdcjcdddshxbe") double bjmpdcjcdddshxbe,@RequestParam("bjmpdcjcdddshxbf") double bjmpdcjcdddshxbf,@RequestParam("bjmpdcjcdddshxisvalid") String bjmpdcjcdddshxisvalid,@RequestParam("bjmpdcjcdddshxisvote") String bjmpdcjcdddshxisvote){

說實話,不想用類似的方式再寫一個類似的功能了,之後查了下,發現在spring裏面有更好的處理方式,就是通過提交表單的方法,所以這裏仔細的研究一下如果通過表單提交該如何處理類似的問題;

        表單處理主要分爲兩部分,一部分是表單的展示,一部分是處理表單的輸入;

1.處理表單的輸入

1.1.註解形式的參數接收

1.1.1. HttpServletRequest可以直接定義在參數的列表,通過該請求可以傳遞參數

@Override
	public int setAllIni(HttpServletRequest request) {
		int ret = 1;
		Map<String, Object> map = new HashMap<String,Object>();
		//續保相關
		map.put("iniName", "xuBaoZaiBeiPingAn");
		map.put("iniValue", request.getParameter("xuBao"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}
		map.put("iniName", "xuBaoZaiBeiPingAnDelayTime");
		map.put("iniValue", request.getParameter("xuBaoDelayTime"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}

可以從HttpServletRequest 取出“xuBao”屬性,然後進行操作!

1.1.2. 在參數列表上直接定義要接收的參數名稱,只要參數名稱能匹配的上就能接收所傳過來的數據, 可以自動轉換成參數列表裏面的類型,注意的是值與類型之間是可以轉換的

1.1.2.1,傳遞多種不同類型的參數:

url:http://baoxian.qa.ms.netease.com/vehicle/input?city_code=23223&license_no=12345&license_owner=kang&frame_no=9090&engine_no=8080&vehicle_name=4343&enroll_date=2015-08-07&seat_count=6

@RequestMapping(value="/vehicle/input",method=RequestMethod.POST)
    @ResponseBody
    public String vehicleInput(@RequestParam("city_code") String citycode,@RequestParam("license_no") String licenseNo,
		  @RequestParam(value="license_owner",required=false) String licenseOwner, @RequestParam(value="frame_no",required=false) String frameNo,
		  @RequestParam(value="engine_no",required=false) String engineNo,@RequestParam(value="vehicle_name",required=false) String vehivleName,
		  @RequestParam(value="enroll_date",required=false) String enrollDate,@RequestParam(value="seat_count",required=false) String seatCount){
		LogConstant.runLog.info("輸入的參數:citycode:" + citycode + " license_no:"
				+ licenseNo + " license_owner:" + licenseOwner + " frame_no:"
				+ frameNo + " engine_no:" + engineNo + " vehicle_name:"
				+ vehivleName + " enroll_date:" + enrollDate + " seat_count:"
				+ seatCount);
    if(StringUtils.isEmpty(citycode) || StringUtils.isEmpty(licenseNo) || StringUtils.isEmpty(licenseOwner)){
    	return "無效的參數設置!";
    }
	String result = carTypeMockService.vehicleInput(citycode,licenseNo,licenseOwner,frameNo,engineNo,vehivleName,enrollDate,seatCount);
	return result;
}

1.1.2.2.傳遞數組

url:http://localhost/mvc/test/toPerson2.do?name=tom&name=jack  

    /** 
     * 對數組的接收,定義爲同名即可  
     */  
    @RequestMapping("/toPerson2.do")  
    public String toPerson2(String[] name) {  
        for (String result : name) {  
            System.out.println(result);  
        }  
        return "jsp1/index";  
    }  

1.1.2.3.傳遞自定義對象(可多個)

url:http://localhost/mvc/test/toPerson3.do?name=zhangsan&age=14&address=china&birthday=2000-2-11

 User 定義的屬性有:name,age,並且有各自屬性的對應的set方法以及toString方法

 Person定義的屬性有:name,age.address,birthday,並且有各自屬性的對應的set方法以及toString方法

    /** 
     *  
     * 傳遞的參數的名字必須要與實體類的屬性set方法後面的字符串匹配的上才能接收到參數,首字符的大小寫不區分 
     * 請求中傳的參數只要是能和參數列表裏面的變量名或者實體裏面的set後面的字符串匹配的上就能接收到  
     *  
     */  
    @RequestMapping("/toPerson3.do")  
    public String toPerson3(Person person, User user) {  
        System.out.println(person);  
        System.out.println(user);  
        return "jsp1/index";  
    }  

1.2.ajax請求

function setAllIni(){
	var data = {};
	data.xuBao = $("#setXuBao").val();
	data.xuBaoDelayTime = $("#xuBaoDelayTime").val();
	
	......
	
	$.ajax({
			url: '/zaiBeiPingAn/setAllIni.html',
			type: 'POST',
			data: data,
			dataType: 'json',
			async: false,
			success: function(json){
				if(json.retCode=="200"){
					bootbox.alert({  
						message: '批量設置成功',
			            buttons: {  
			               ok: {  
			                    label: '確定',  
			                    className: 'btn-myStyle',
			                }  
			            },
			            callback: function() {  
	                    	window.location.reload();
			            }
			        });
				}else{
					bootbox.alert("批量設置失敗");
				}
			}
	});
裏面只是顯示了表單裏面的一條數據,其他數據格式類似;

1.3.表單提交

表單ftl頁面:

<#include "../../inc/core.ftl">
<@htmHead title="保險Mock平臺" 
otherJs=["/js/insurance/pingan/zaiBei.js", "/js/common/bootbox.js", "/js/date/WdatePicker.js"]
/>

<@htmlNavHead /> 
	<div id="page-wrapper">
    	<div class="row">
            <div class="col-lg-12">
                <h1 class="page-header">災備測試</h1>
            </div>
        </div>
        <br><br>
  		
  		<div class="row">
            	<div class="col-lg-12">
					<div  class="col-lg-3">
						<div class="form-group input-group">
							<span class="input-group-addon">續保校驗</span>
            				<select id="setXuBao" class="form-control" οnchange="changeDelayTime('xb','setXuBao','xuBaoDelayTime')">
                    			<option value="success">成功</option>
                    			<option value="delay">延時</option>
                    			<option value="failure">失敗</option>	                
                    			<option value="session">session失效</option>	                
            				</select>
                		</div>
                	</div>
                	
                	<div class="col-lg-3" id="xb-delay" style="display: none;">
						<div class="form-group input-group">
							<span class="input-group-addon">延時時長</span>
							<input id="xuBaoDelayTime" class="form-control">
						</div>
					</div>
                	<button class="btn btn-primary" type="button" onClick="setZaiBei('xuBao')">設置</button>
				</div>
		</div> 
		
		<div class="row">
            	<div class="col-lg-12">
					<div  class="col-lg-3">
						<div class="form-group input-group">
							<span class="input-group-addon">生日校驗</span>
            				<select id="setShengRi" class="form-control" οnchange="changeDelayTime('sr','setShengRi','shengRiDelayTime')">
                    			<option value="success">成功</option>
                    			<option value="delay">延時</option>
                    			<option value="failure">失敗</option>
                    			<option value="session">session失效</option>	                
            				</select>
                		</div>
                	</div>
                	
                	<div class="col-lg-3" id="sr-delay" style="display: none;">
						<div class="form-group input-group">
							<span class="input-group-addon">延時時長</span>
							<input id="shengRiDelayTime" class="form-control">
						</div>
					</div>
                	<button class="btn btn-primary" type="button" onClick="setZaiBei('shengRi')">設置</button>
				</div>
		</div>
<div class="row">
            	<div class="col-lg-12">		
            		<button class="btn btn-primary" type="button" onClick="setAllIni()">批量設置</button>			
                	<button class="btn btn-primary" type="button" onClick="setBackUp()">還原設置</button>
				</div>
		</div>
		 		     
    </div>

對象java方法:

@RequestMapping("/zaiBeiPingAn/setAllIni")
	@ResponseBody
	public Map<String, Object> setAllIni(HttpServletRequest request, Model model){		
		
		Map<String, Object> retMap = new HashMap<String, Object>();
		int ret = zaiBeiService.setAllIni(request);
				
		if(ret == 1){
			retMap.put("retCode", 200);
			retMap.put("retDesc", "批量設置成功");
		}else{
			retMap.put("retCode", -1);
			retMap.put("retDesc", "批量設置失敗");
		}
		return retMap;
	}

@Override
	public int setAllIni(HttpServletRequest request) {
		int ret = 1;
		Map<String, Object> map = new HashMap<String,Object>();
		//續保相關
		map.put("iniName", "xuBaoZaiBeiPingAn");
		map.put("iniValue", request.getParameter("xuBao"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}
		
		map.put("iniName", "xuBaoZaiBeiPingAnDelayTime");
		map.put("iniValue", request.getParameter("xuBaoDelayTime"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}
		
		//生日相關
		map.put("iniName", "shengRiZaiBeiPingAn");
		map.put("iniValue", request.getParameter("shengRi"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}
		
		map.put("iniName", "shengRiZaiBeiPingAnDelayTime");
		map.put("iniValue", request.getParameter("shengRiDelayTime"));
		ret = zaiBeiDao.updateIniZaiBei(map);
		if(ret != 1){
			return 0;
		}
		
		return ret;
	}
這裏描述了兩條記錄的情況,我們來看下運行情況:



參考文章:

1.http://alog2012.iteye.com/blog/2040214


發佈了50 篇原創文章 · 獲贊 13 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章