您的位置:首页 > 编程语言 > Java开发

[struts2.x] 通过Map从前端传递动态扩展的属性

2014-07-30 20:49 225 查看
应用背景简介:

这两天有个开发任务,为了满足多个资源使用统一管理模块管理,需要提供自定义动态属性配置,从而不需要修改后台代码,可以满足经常变化的属性需求。后台的其它部分,在后续其它文章中总结,这里主要介绍一下如何将这些动态属性传递到后台。

这里,我们使用的MVC框架是struts,从前端传值到后台,使用struts可以轻松完成POJO的值注入。如果我们要完成动态属性定义,就不可能预先知道这个属性的key,所以不可能预先在POJO中定义对应的成员变量。所以,需要有个可以接受未定义的属性值,而且还能接收到这个key。首先,想到的是使用Map。到底可以吗,我们实战看看。

实战概况:

开始测试想法,环境配置同之前的文章,不做详述,首先写一个接受action,。

/**
* 测试是否可以通过map接收前端传参
*
* @author linjx
* @date 2014-7-29
* @version 1.0.0
*/
@ParentPackage(value =
"json-default")
public
class
MapInputTestAction {

private Map<String,Object>
map;

@Action(value="/map/input", results= {@Result(name = ActionSupport.SUCCESS, type="json")})
public String input() {
System.out.println(getMap());
return ActionSupport.SUCCESS;
}

public Map<String,Object> getMap() {
return
map;
}

public
void
setMap(Map<String, Object> map) {
this.map = map;
}
}

上述action只有一个私有变量,实现方式并不需要指定。

然后前端jsp,不讲究具体样式

<%@
page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE
html PUBLIC
"-//W3C//DTDXHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>map测试界面</title>
</head>
<body
background="${images}/bonjour-bg.jpg">
<form
name="map-form"action="${ctx}/map/input.action"
method="post">
<br/><br/>
<label>编号:</label><input
type="text"name="map.code"/><br/>
<label>名称:</label><input
type="text"name="map.name"/><br/>
<label>性别:</label><input
type="text"name="map.sex"/><br/>
<label>年龄:</label><input
type="text"name="map.age"/><br/>
<input
type="submit"value="提交"/>
</form>
</body>
</html>

对应输入界面:



点击提交后界面跳转到/map/input.action界面,结果为json字符串,如下

{"map":{"sex":["male"],"name":["jason"],"age":["24"],"code":["1002"]}}
控制台输出如下

{sex=[Ljava.lang.String;@31d80c,name=[Ljava.lang.String;@5f3b87, age=[Ljava.lang.String;@3d32d3,code=[Ljava.lang.String;@1d3cb2e}
Yes,说明预想成功了。但是,感觉这里面好像还有些细节不是很清晰,map.code这样的属性值是怎么注入的呢?我顺势做了探索,由于篇章偏长,所以单独记录。详情请看下篇博客《》。

小结:

Struts2.x的功能确实比较丰满了,作为一款成熟的MVC开发框架,它拥有很多成熟的工具。即使上述的测试失败了,我们也可以考虑自定义类型转换——前端将我们动态扩展的属性和值拼接为类似json的字符串,然后通过类型转换器,根据预定义的格式反解析出key:value,然后填充到map中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: