`
uule
  • 浏览: 6348891 次
  • 性别: 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
分享到:
评论

相关推荐

    用eclipse实现与数据库连接,实现学生登录功能

    - 创建一个JSP页面,其中包含一个文本框和一个按钮。 - 用户输入数字后点击按钮,JSP页面通过`&lt;jsp:useBean&gt;`标签调用JavaBean中的方法进行判断。 - JavaBean中定义一个名为`isPrime(int number)`的方法,用于...

    一次获得界面所有实体类的数据

    在`generateObject`方法中,通过`request.getParameterNames()`获取所有请求参数的名称,然后对于每一个参数,通过`request.getParameter(key)`获取其值。接下来的关键步骤是根据参数名找到对应的setter方法并调用...

    j2ee中表单传值的所有方法

    此方法返回一个`java.util.Map`对象,其中键是参数名,对应的值是一个字符串数组,表示该参数的所有值。这提供了一种直接访问所有表单参数及其对应值的方法。与`getParameterValues()`类似,它适用于处理具有相同...

    javascript 实现输入多行动态输入

    在Web应用开发中,特别是使用Java Servlet和JSP技术栈时,通常会遇到一个常见需求:收集用户在表单中输入的多行数据。这在实际场景中非常实用,比如用户需要填写多条商品信息或记录多项任务详情等。在传统的静态HTML...

    Java Web应用开发 49 课堂案例-应用Servlet读取所有HTML表单数据.docx

    4. **Enumeration接口**:`getParameterNames()`返回一个`Enumeration`对象,该对象包含了请求参数的所有名称。`Enumeration`是Java中用于遍历集合的一种接口,它没有提供随机访问的能力,只能按照元素被添加的顺序...

    jsp中用集合收集数据并填充BeanForm

    BeanForm通常指的是一个Java Bean对象,它是Java中的一个简单的POJO(Plain Old Java Object),用于封装业务数据。 首先,让我们详细了解一下自定义的`MyArrayList`集合。在Java中,`ArrayList`是`List`接口的一个...

    Java Web程序设计-1期 项目库_单元案例_Servlet典型应用教学案例.doc

    关键在于`req.getParameterNames()`方法,它返回一个`Enumeration`对象,包含了所有表单参数的名称。通过遍历这个`Enumeration`,我们可以获取每一个参数名,并利用`req.getParameterValues(strParam)`方法获取与该...

    java反射-在form提交的一些应用

    Java反射是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法的信息。在“java反射-在form提交的一些应用”这个主题中,我们将探讨如何利用反射机制来处理HTML表单提交的数据,以及...

    jsp源码实例2(获取表单参数).docx

    3. JSP的重置按钮可以清空表单数据,但需要正确编写JavaScript或jQuery代码来实现。 4. 解决JSP页面刷新时表单重复提交的问题,可以通过Session或Token机制来防止。 5. 在非表单请求中设置action的多种方式,扩展了...

    Javaweb获取表单数据的多种方式

    2. `getParameterValues(String name)`:当表单字段有多个同名且用户可以多选时(如复选框或单选按钮),此方法返回一个字符串数组,包含所有选中的值。例如,`request.getParameterValues("hobby")`会返回用户选择...

    java Servlet对表单的处理过程

    如果表单的action属性指向了一个Servlet,那么这个请求就会被Servlet接收。 3. 初始化Servlet Servlet容器(如Tomcat)接收到请求后,检查是否有Servlet实例已经存在。如果没有,它会创建一个新的Servlet实例,并...

    jsp表单制作.rar_html_jsp_jsp 制作表单_jsp开发_jsp表单制作

    - `request.getParameterNames()`:列出所有提交的参数名,可用于遍历所有表单数据。 - `session`和`application`对象:可用于存储会话或全局级别的数据,比如用户登录信息。 - JSP脚本元素:`&lt;%= %&gt;`用于输出...

    javaWeb实现的过滤器敏感字过滤

    1. **创建敏感字符列表**:首先,需要定义一个包含所有敏感字符的集合,这可以是一个文本文件,存储敏感字符或短语。 2. **读取字符列表**:在程序运行时,读取这个文件,将敏感字符加载到内存中的数据结构,如...

    java 遍历request中的所有表单数据的实例代码

    本篇将详细介绍如何使用Java遍历`HttpServletRequest`对象来获取所有表单数据,并提供一个具体的实例代码。 首先,我们需要了解`HttpServletRequest`接口中的`getParameterNames()`方法。这个方法返回一个`...

    reqresp_demo 2.zip

    `getParameterNames()`是`HttpServletRequest`接口中的一个方法,它的功能是返回一个包含所有请求参数名的`Enumeration`(枚举)对象。这个枚举对象包含了请求URL、查询字符串或表单提交的所有参数的名称。例如,...

    HttpServletRequest与HttpServletResponse的实现类.docx

    每次客户端向Web服务器发起请求时,服务器都会为每个请求创建一个HttpServletRequest对象和一个HttpServletResponse对象,以便开发者能够通过这些对象获取请求信息并构造响应。 ### 一、实现类与实例化 ...

    Request对象.pptx

    - `getParameterNames()`:返回一个枚举(`Enumeration`),包含了请求中所有参数的名称。 - `getParameterMap()`:返回一个`Map`,键是参数名,值是对应的参数值列表(如果参数有多个值,列表长度可能超过1)。 ...

    JAVA Web程序设计-3期(KC006) 13单元案例_Servlet典型应用教学案例.doc

    在Servlet中,通常会重写`doPost`方法来处理POST请求,这是HTML表单提交数据时常用的方法。案例中的`doPost`方法在接收到请求后进行响应处理。 3. **设置响应内容类型**: `res.setContentType("text/html")`用于...

    Ajax请求和Filter配合案例解析

    上述Java代码中,`SQLFilter`类实现了`Filter`接口,并在其`doFilter`方法中获取了所有请求参数,拼接成一个字符串`sql`。然后,通过`sqlValidate`方法进行检查,如果检查出存在潜在的SQL注入字符串,则拦截请求并...

Global site tag (gtag.js) - Google Analytics