string-map-prefix string-list-suffix

一般service都是用在event,所以主要看serviceeventhandler就可以了。

先看string-map-prefix

在serviceeventhandler中的代码

  Map<String, Object> serviceContext = FastMap.newInstance();
        for (ModelParam modelParam: model.getInModelParamList()) {
            String name = modelParam.name;
ofbiz10大概是233行


其中有

if (UtilValidate.isNotEmpty(modelParam.stringMapPrefix)) {
                Map<String, Object> paramMap = UtilHttp.makeParamMapWithPrefix(request, multiPartMap, modelParam.stringMapPrefix, null);

可以看出来makeParamMapWithPrefix才是将参数解析成map的代码
解析方式大概是
查找每个请求字段,看字段的名字是否以string-map-prefix开头
假设配置
<attribute name="names" mode="IN" type="Map"
string-map-prefix="_o_"></attribute>
请求

127.0.0.1:8080/l/control/processFirstForm?_o_names_1=1&_o_names_2=2

那么最后names这个map有内容
{names_1=1, names_2=2}
可以看到,只要_o_开头的参数都被解析成了map中的元素,另外一点就是前缀之后的参数名就是这个map的key了,如_o_names_1=1请求参数的names_1就是一个key。

string-list-suffix和string-map-prefix有点类似
通过
List<Object> paramList = UtilHttp.makeParamListWithSuffix(request, multiPartMap, modelParam.stringListSuffix, null);完成参数转化

请求http://127.0.0.1:8080/l/control/processFirstForm?names_o_=1&names1_o_=2
发送过去后,解析的时候,只要是以_o_结尾的参数,都会被加入到list,那么
names_o_=1&names1_o_=2
两个参数都是以_o_结尾的,自然都是会被加入到list中。
解析后的list有两个元素,分别是1和2。

你可能感兴趣的:(String)