`
uule
  • 浏览: 6310473 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

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

    博客分类:
  • JSP
阅读更多

1.总结:

1、注意页面的name为emails.host,这样才可把 group和相应属性分开
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}

 

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):

 

 

 

  • 大小: 21.7 KB
  • 大小: 39.7 KB
分享到:
评论

相关推荐

    javascript 实现输入多行动态输入

    JSP用中收集数据:javascript 实现输入多行动态输入 在网上找了一下,只有一篇此类文章,还是PHP的,害得我要特意去看一下PHP,感觉很不好,是一种弱类型的语言,可以不声明就使用,因此,还要在每个变量前加$.不知道那些...

    jsp九大内置对象

    但是与Session对象不同的时,所有客户的Application对象都时同一个,即所有客户共享这个内置的Application对象。  (2)Application对象的常用方法  ● setAttribute(String key,Object obj):将参数Object指定...

    java 面试题 总结

    接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的...

    超级有影响力霸气的Java面试题大全文档

    接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的...

    JAVA程序员面试题

    getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例 getParameterValues(String name):获得有name指定的参数的所有值 getProtocol():获取客户端向服务器端传送数据所依据的...

    J2EE程序中的SQL语句自动构造方法讲解

    借用j2ee中的request.getParameterNames()方法可以读到表单中的所有元素的名称,有了元素名称借用request.getParameter(elementName)方法可以获取该元素的值。假设在开发中我们让页面元素的名称和底层数据库表的字段...

    J2EE应用程序中SQL语句的自动构造方法

    借用j2ee中的request.getParameterNames()方法可以读到表单中的所有元素的名称,有了元素名称借用request.getParameter(elementName)方法可以获取该元素的值。假设在开发中我们让页面元素的名称和底层数据库表的字段...

    tr-069-ClientTR069.tar.gz java实现源码

    实现 tr069 协议,包含了RPCMethod相关大部分协议,例如:GetRpcMethods、GetRpcMethodsResponse、AddObject.java、AddObjectResponse.java、DeleteObject.java、Download.java、FactoryReset.java、...

    jsp内置对象的用法

    5 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组 6 void invalidate() 取消SESSION,使SESSION不可用 7 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入 8 void ...

    jspsmart.jar包及帮助文档

     这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。  File类主要提供以下方法: 1、saveAs作用:将文件换名另存。 原型: public void saveAs(java...

    JSP用过滤器解决request getParameter中文乱码问题

    在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象,下面是JSP用过滤器解决request中文乱码问题的具体实现

    安防门禁SDK控制器Demo

    //该项目demo只返回一个时间段做为展示 Map, String&gt; time = times.get(id); Set&lt;String&gt; keys = time.keySet(); time.put("id", id); JSONObject t = new JSONObject(); for(String key : keys) { t.put(key...

    ACSserver win32版本

    windows版本的ACSServer。本工具可以适用于调试网管CPE的基本功能。 目前支持的功能: GetRPCMethods, SetParameterValues, GetParameterValues, GetParameterNames, ...Authentication(摘要认证,双向认证都是支持)

    java sql注入l

    29 Enumeration params = req.getParameterNames(); 30 String sql = ""; 31 while (params.hasMoreElements()) { 32 //得到参数名 33 String name = params.nextElement().toString(); 34 //System.out....

    servlet2.4doc

    Overview Package Class Tree Deprecated Index Help PREV NEXT FRAMES NO FRAMES A B C D E F G H I J L P R S U V -------------------------------------------------------------------------------- ...

Global site tag (gtag.js) - Google Analytics