说明

当url中传入参数比如salesRD=admin;bob时,joget插件(Mutl SelectBox和Popup SelectBox)在解析时会认为是一个值,因此表单是无法正确初始化相应的字段的,需要用js代码手动设置


另外如果传入的格式为salesRD=admin&salesRD=bob时,joget会认为传了两个值,这种情况是可以正常初始化相应字段的

Muti SelectBox

<script type="text/javascript">
    $(function(){
       var value = decodeURIComponent("#requestParam.ba#");
       var values = value.split(';');

        $.each( values, function( index, value ){
            $(FormUtil.getField("ba")).find("option[value='" + value + "']").attr('selected', 'selected');
        });
        $(FormUtil.getField("ba")).trigger("chosen:updated");
    });
</script>


Popup Selectbox

由于select元素下的option列表不是初始加载就有的,因此无法像multiselectbox那样直接设置option的selected属性

需要通过ajax请求datalist数据后,找到对应的行手动设置到popup select中

datalist api非管理角色用户是没有权限调用的,因此要配合Webservice Permission插件,将该用户添加到api的使用权限里


<script type="text/javascript">
    $(function () {
        var ajax_settings={
            master_username:'admin',
            master_hash:'14ACD782DCFEB2BCDE2B271CCD559477',
            login_as:'admin',
            from_appId:'#appDef.appId#',//数据来自应用id
            env_appId:'ajax_form_fill_demo',//环境变量来自应用id
            api_id:'list',
            context:'http://localhost:8082/jw' //webservice permission插件使用的api context
    
        }
        var popSelectAutoset = [
            {
                paramId: 'salesRD',//请求参数
                paramValue: '#requestParam.salesRD#',//请求参数值
                popupListId: 'list_t_staff',//popup列表
                popupDisplayLabel: 'firstName'//popup显示字段
            }
        ]
        popSelectAutoset.forEach(function (config) {
            var split = decodeURIComponent(config.paramValue).split(";");
            if (split) {
                $.ajax({
                    type: "POST",
                    url: '#request.scheme#://#request.serverName#:#request.serverPort##request.contextPath#/web/json/plugin/com.valuprosys.joget.WebServicePermissionManagement/service',
                    data: {
                        action : 'agent',
                        envAppId:ajax_settings.env_appId,
                        appId:ajax_settings.from_appId,
                        listId:config.popupListId,
                        id : ajax_settings.api_id,
                        context:ajax_settings.context
                    },
                    success: function (json) {
                        if (json.total && json.total > 0) {
                            $.each(split, function (index, value) {
                                json.data.forEach(function (d) {
                                    if (d.id && d.id == value) {
                                        $('select.' + config.paramId).popupselect("addOption", { id: value, result: "{'id':'" + value + "','" + config.popupDisplayLabel + "':'" + d[config.popupDisplayLabel] + "'}" });
                                    }
                                })
                            })
                        }
                    },
                    error: function (e) {
                        console.log(e)
                    },
                    dataType: "json"
                });

            }
        })

    })
</script>

上面的代码比较繁琐,需要依赖Webservice Permission

改为判断参数是否含有分号,将其改为"salesRD=admin&salesRD=bob"的形式,再重新加载页面:

<script type="text/javascript">
    $(function () {
        var paramKeys=['salesRD','PSM','RCM','BA','ROM'];//需要加载处理的popselect字段集合
            
        function commaParamProcess(paramKeys){
            var href=window.location.href;
            var splits=href.split('&')
            if(splits.length<=1){
                return;
            }
            for(var i=1;i<splits.length;i++){
                var group=splits[i];
                var groupKey=group.split('=')[0];
                for(var j=0;j<paramKeys.length;j++){
                    if(groupKey===paramKeys[j]){
                        var groupValue=decodeURIComponent(group.split('=')[1]);
                        var newGroup="";
                        var groupValueSplits=groupValue.split(";");
                        for(var k=0;k<groupValueSplits.length;k++){
                            newGroup+=newGroup==""?groupKey+'='+groupValueSplits[k]:'&'+groupKey+'='+groupValueSplits[k]
                        }
                        splits[i]=newGroup;
                    }
                }
            }
            var newHref=splits.join('&');
            if(href!=newHref){
                window.location.href=newHref;
            }
        }
        commaParamProcess(paramKeys);
    })
</script>
  • No labels