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

应用背景简介:

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

这里,我们使用的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中。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值