利用getParameterNames兑现一个按钮所有模块数据都提交
利用getParameterNames实现一个按钮所有模块数据都提交
1.总结:
1、注意页面的name为emails.host,这样才可把 group和相应属性分开
2、作为Value的Map需转化为JSON类型数据后再插入数据库
3、把从数据库中读出的数据先转换为JSON类型,再由JSON类型转换为Map类型,最后放入作为Map的Setting中
2、作为Value的Map需转化为JSON类型数据后再插入数据库
3、把从数据库中读出的数据先转换为JSON类型,再由JSON类型转换为Map类型,最后放入作为Map的Setting中
三个模块共用一个确定按钮!
页面如下:
<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; }
数据库中数据如图:
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}
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):