- 浏览: 6310473 次
- 性别:
- 来自: 一片神奇的土地
文章分类
- 全部博客 (745)
- JQuery (25)
- JS (33)
- 数据库 (59)
- Java基础 (56)
- JSON (8)
- XML (8)
- ireport (7)
- 设计模式 (10)
- 心情 (14)
- freemarker (1)
- 问题 (15)
- powerdesigner (2)
- CSS (15)
- DWR (4)
- tomcat (16)
- Hibernate (12)
- Oracle (7)
- Struts (7)
- Spring (34)
- JSP (23)
- 需学习 (64)
- 工具类库 (63)
- Maven (14)
- 笔试题 (34)
- 源码学习 (31)
- 多线程 (39)
- Android (32)
- 缓存 (20)
- SpringMVC (14)
- jQueryEasyUi (12)
- webservice-RPC (13)
- ant (1)
- ASP.NET (10)
- 正则表达式 (3)
- Linux (15)
- JBoss (1)
- EJB (3)
- UML (2)
- JMS (3)
- Flex (8)
- JSTL (2)
- 批处理 (5)
- JVM (16)
- 【工具】 (16)
- 数据结构 (29)
- HTTP/TCP/Socket (18)
- 微信 (1)
- tomcat源码学习 (15)
- Python (30)
- 主机 (2)
- 设计与架构 (19)
- thrift-RPC (2)
- nginx (6)
- 微信小程序 (0)
- 分布式+集群 (12)
- IO (1)
- 消息队列 (4)
- 存储过程 (8)
- redis (9)
- zookeeper (5)
- 海量数据 (5)
最新评论
-
360pluse:
技术更新,战术升级!Python爬虫案例实战从零开始一站通网盘 ...
Python爬虫实战:Scrapy豆瓣电影爬取 -
18335864773:
推荐用 pageoffice 组件生成 word 文件。
JAVA生成WORD工具类 -
jjhe369:
LISTD_ONE 写道起始地址为163.135.0.1 结束 ...
IP地址与CIDR -
baojunhu99:
private final int POOL_SIZE = 5 ...
使用CompletionService获取多线程返回值 -
LovingBaby:
胡说,javascript 运行时是单线程的,event lo ...
Ajax请求是否可以实现同步
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):
发表评论
-
Form的onsubmit
2015-02-05 11:06 47171. <form class="for ... -
使文本框不可编辑[不太常用的方法]
2012-09-10 11:17 2376为了使本框不可编辑,我们可以使用下面几种方法 解决思路: 文本 ... -
C 标签使用
2012-07-26 12:16 2888<title>虚拟机管控</title&g ... -
显示结果排序
2012-05-04 14:15 1254<td width="9%" s ... -
select级联操作的简便方法
2012-04-18 15:07 7735<script type=&quo ... -
GuestName处理方法
2012-01-31 10:39 2060主要考虑如何设计,如何实现,如何思考! 效果: ... -
[基础]Map在JSP中的两种显示方式
2011-10-27 09:36 138191、 Java: for(EglSpecialRequ ... -
JSP自定义标签
2011-09-01 12:07 1680实际使用: <td style="text- ... -
[转]如何用div+css布局页面
2011-08-01 17:58 2258如今web2.0炒的很厉害, ... -
iframe总结 + window.open
2011-06-20 11:47 15858从frame中跳出并转向: parent.window. ... -
window.showModalDialog()
2011-06-01 15:23 3557window.open() 打开一个普通窗口 win ... -
一个星期中某一天存在即显示的思路
2011-05-31 17:48 11251、 days: 1,2,3,4,5,6,0 // ... -
某一模块动态+、—效果的实现
2011-04-21 11:08 1333代码(去掉部分css细节,只关注主要功能): < ... -
批量更新时判断哪个需要更新
2011-04-06 16:03 1845<input type="checkbox ... -
JSP中循环二维数组 + 循环Map
2011-04-01 16:46 7181代码如下: <C:forEach items=&q ... -
使用Table的insertRow实现某一模块的复制
2011-03-21 14:16 3291实现的效果:点击+号添加一组 JSP页面: < ... -
[基础]由复选框实现的批量删除
2011-03-21 11:31 2960批量删除: 选中多个复选框: 每一条记录: ... -
table总结insertRow、deleteRow
2011-03-16 16:13 20468表格有几行: var trCnt = table.rows.l ... -
struts中用到的复选框和查询技巧
2011-03-09 11:06 123实现效果:1、选中复选框时,其后文本框显示,没选中时,隐藏 ... -
js实现的复选框选中时的批量操作
2011-03-04 14:22 56761. var checkedList = []; // sa ...
相关推荐
JSP用中收集数据:javascript 实现输入多行动态输入 在网上找了一下,只有一篇此类文章,还是PHP的,害得我要特意去看一下PHP,感觉很不好,是一种弱类型的语言,可以不声明就使用,因此,还要在每个变量前加$.不知道那些...
但是与Session对象不同的时,所有客户的Application对象都时同一个,即所有客户共享这个内置的Application对象。 (2)Application对象的常用方法 ● setAttribute(String key,Object obj):将参数Object指定...
接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的...
接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的...
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例 getParameterValues(String name):获得有name指定的参数的所有值 getProtocol():获取客户端向服务器端传送数据所依据的...
借用j2ee中的request.getParameterNames()方法可以读到表单中的所有元素的名称,有了元素名称借用request.getParameter(elementName)方法可以获取该元素的值。假设在开发中我们让页面元素的名称和底层数据库表的字段...
借用j2ee中的request.getParameterNames()方法可以读到表单中的所有元素的名称,有了元素名称借用request.getParameter(elementName)方法可以获取该元素的值。假设在开发中我们让页面元素的名称和底层数据库表的字段...
实现 tr069 协议,包含了RPCMethod相关大部分协议,例如:GetRpcMethods、GetRpcMethodsResponse、AddObject.java、AddObjectResponse.java、DeleteObject.java、Download.java、FactoryReset.java、...
5 String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组 6 void invalidate() 取消SESSION,使SESSION不可用 7 boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入 8 void ...
这个类包装了一个上传文件的所有信息。通过它,可以得到上传文件的文件名、文件大小、扩展名、文件数据等信息。 File类主要提供以下方法: 1、saveAs作用:将文件换名另存。 原型: public void saveAs(java...
在服务器端用request.getParameter()读取参数时,很容易出现中文乱码现象,下面是JSP用过滤器解决request中文乱码问题的具体实现
//该项目demo只返回一个时间段做为展示 Map, String> time = times.get(id); Set<String> keys = time.keySet(); time.put("id", id); JSONObject t = new JSONObject(); for(String key : keys) { t.put(key...
windows版本的ACSServer。本工具可以适用于调试网管CPE的基本功能。 目前支持的功能: GetRPCMethods, SetParameterValues, GetParameterValues, GetParameterNames, ...Authentication(摘要认证,双向认证都是支持)
29 Enumeration params = req.getParameterNames(); 30 String sql = ""; 31 while (params.hasMoreElements()) { 32 //得到参数名 33 String name = params.nextElement().toString(); 34 //System.out....
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 -------------------------------------------------------------------------------- ...