利用getParameterNames兑现一个按钮所有模块数据都提交

利用getParameterNames实现一个按钮所有模块数据都提交

1.总结:

1、注意页面的name为emails.host,这样才可把 group和相应属性分开
2、作为Value的Map需转化为JSON类型数据后再插入数据库
3、把从数据库中读出的数据先转换为JSON类型,再由JSON类型转换为Map类型,最后放入作为Map的Setting中
 

利用getParameterNames兑现一个按钮所有模块数据都提交
 三个模块共用一个确定按钮!

页面如下:

<table class="form-table">
		<tr>
			<td class="label">
				主机:
			</td>
			<td>
				<input type="text"   name="emails.host" value="${emails.host}"/>
			</td>
		</tr>

		<tr>
			<td class="label">
				发信邮箱
			</td>
			<td>
				<input type="text" name="emails.username" value="${emails.username}"/>
			</td>
		</tr>
		
		<tr>
			<td class="label">
				密码:
			</td>
			<td>
			<input type="password" name="emails.password" value="${emails.password}"/>
			</td>
		</tr>
	</table>
 
public String save(){
		HttpServletRequest  request = ServletActionContext.getRequest();
		Enumeration<String> names = request.getParameterNames();
		     //request.getParameterNames()所返回的枚举Enumeration类
	Map<String,Map<String,String>> settings = new HashMap<String, Map<String,String>>();
		
	    while(names.hasMoreElements()){	
	    	String name= names.nextElement();
	    	String[]name_ar = name.split("\\.");
	    	  //name.split(regex) 如果有特殊符号,里面的string是正则表达式,需转义
	    	  //此处name为comments.pageSize,故以.分割,需转义
	    	  //分割后的name_ar为:[comments, pageSize]
	    	if(name_ar.length!=2) continue;
	    	
	    	String groupName = name_ar[0];
	    	String paramName  = name_ar[1];
	    	String paramValue = request.getParameter(name);
	    	
	    	Map<String,String> params = settings.get(groupName);
	    	if(params==null){
	    		params = new HashMap<String, String>();
	    		settings.put(groupName, params);
	    	}
	    	params.put(paramName, paramValue);
 
	    }	    
		settingService.save( settings );
		this.msgs.add("配置修改成功");
		this.urls.put("系统设置", "setting!edit_input.do");
		return this.MESSAGE;
	}

 数据库中数据如图:


利用getParameterNames兑现一个按钮所有模块数据都提交

Map<String,Map<String,String>> settings = new HashMap<String, Map<String,String>>();
Map<String,String> params = new HashMap<String, String>();

setting(Map类型):
{photo={}, comments={pageSize=5}}
{emails={password=123456}, photo={watermark=off, marksize=12, detail_pic_width=350}, comments={pageSize=5, directShow=0}}

保存Setting到数据库:(作为Value的Map需转化为JSON类型数据后再插入数据库)
        public void save( Map<String,Map<String,String>> settings ) throws SettingRuntimeException {
		Iterator<String> settingkeyItor = settings.keySet().iterator(); 
		while ( settingkeyItor.hasNext() ) {			
			String settingKey = settingkeyItor.next();
			JSONObject jsonObject = JSONObject.fromObject( settings );
			
			this.daoSupport.execute("update settings set cfgvalue=? where cfg_group=?",jsonObject.toString(),settingKey);
		}	 
	}

 从数据库中读出数据并输出为Map类型:

String sql = "select * from settings";
List<Map<String, String>> list = this.baseDaoSupport.queryForList(sql);
list:
[{id=1, code=null, cfgvalue={"detail_pic_height":"470","watermark":"off","thumbnail_pic_height":"245","markcolor":"#000000","thumbnail_pic_width":"185","album_pic_height":"2030","markpos":"1","album_pic_width":"1500","marksize":"12","detail_pic_width":"350"}, cfg_group=photo},
{id=2, code=null, cfgvalue={"anonymous":"0","validcode":"1","pageSize":"5","directShow":"0"}, cfg_group=comments},
{id=3, code=NULL, cfgvalue={"title":"在线客服","qqlist":"52560956:技术支持,25106942:市场营销","state":"1","worktime":"9:00至18:00","qq":"1"}, cfg_group=im},
{id=4, code=null, cfgvalue={"username":"EmailTest@126.com","host":"smtp.126.com","password":"123456"}, cfg_group=emails}]

setting_value:
{"detail_pic_height":"470","watermark":"off","thumbnail_pic_height":"245","markcolor":"#000000","thumbnail_pic_width":"185","album_pic_height":"2030","markpos":"1","album_pic_width":"1500","marksize":"12","detail_pic_width":"350"}
itemMap:
{detail_pic_height=470, watermark=off, thumbnail_pic_height=245, album_pic_height=2030, thumbnail_pic_width=185, markcolor=#000000, markpos=1, marksize=12, album_pic_width=1500, detail_pic_width=350}

 

public Map<String,Map<String ,String>>  getSetting() {
		String sql = "select * from settings";
		List<Map<String, String>> list = this.baseDaoSupport.queryForList(sql);
		Map<String,Map<String,String>> cfg = new HashMap();
		
		for (Map<String,String> map : list) {
			String setting_value = map.get("cfg_value");
			if(StringUtil.isEmpty(setting_value)){
				cfg.put( map.get("cfg_group"), new HashMap<String, String>());
			}else{
				JSONObject jsonObject = JSONObject.fromObject( setting_value );  
				Map itemMap = (Map)jsonObject.toBean(jsonObject, Map.class);
				cfg.put( map.get("cfg_group"), itemMap);
			}
		}
		return cfg;
	}

 

JSONObject.toBean(jsonObject,class):

 

 

 

利用getParameterNames兑现一个按钮所有模块数据都提交