盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

flowable框架bug-flowable-ui-admin中文乱码

分享牛 5636℃

flowable-ui-idm,task,modeler 三个模块可以正常显示中文,但是flowable-ui-admin中文不能正常显示(flowable6.1.2以下版本包括该版本),比如我们定义了流程之后,显示查询之后,如下图所示:

 

下面,我们看一下这个bug出现的原因。首先我们看一下上传文档对应的实现,该服务功能位于DeploymentCollectionResource类中的uploadDeployment方法中,实例代码如下:

 public DeploymentResponse uploadDeployment(@ApiParam(name = "deploymentKey") @RequestParam(value = "deploymentKey", required = false) String deploymentKey,
@ApiParam(name = "deploymentName") @RequestParam(value = "deploymentName", required = false) String deploymentName,
@ApiParam(name = "tenantId") @RequestParam(value = "tenantId", required = false) String tenantId,
HttpServletRequest request, HttpServletResponse response) {
......
if (StringUtils.isEmpty(deploymentName)) {

}

看到上述的代码StringUtils.isEmpty(deploymentName)就明白了,原来这个地方并没有进行编码工作,中文当然要乱码了,正确的写法,应该是对所有的参数进行解码,类似下面的代码:

URLDecoder.decode(string, "UTF-8")

如果这个问题,让我们自己解决可能有点麻烦,所以直接反馈给flowable官方了,目前官方已经修复了该bug。如下所示:


.../src/main/java/org/flowable/rest/service/api/repository/DeploymentCollectionResource.java


@@ -13,6 +13,8 @@





package org.flowable.rest.service.api.repository;





+import java.io.UnsupportedEncodingException;


+import java.net.URLDecoder;


import java.util.HashMap;


import java.util.Map;


import java.util.zip.ZipInputStream;

@@ -143,6 +145,9 @@ public DeploymentResponse uploadDeployment(@ApiParam(name = "deploymentKey") @Re


            throw new FlowableIllegalArgumentException("Multipart request is required");


        }





+        String queryString = request.getQueryString();


+        Map<String, String> decodedQueryStrings = splitQueryString(queryString);


+


        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;





        if (multipartRequest.getFileMap().size() == 0) {

@@ -167,7 +172,7 @@ public DeploymentResponse uploadDeployment(@ApiParam(name = "deploymentKey") @Re


                throw new FlowableIllegalArgumentException("File must be of type .bpmn20.xml, .bpmn, .bar or .zip");


            }





-            if (StringUtils.isEmpty(deploymentName)) {


+            if (!decodedQueryStrings.containsKey("deploymentName") || StringUtils.isEmpty(decodedQueryStrings.get("deploymentName"))) {


                String fileNameWithoutExtension = fileName.split("\\.")[0];





                if (StringUtils.isNotEmpty(fileNameWithoutExtension)) {

@@ -176,11 +181,11 @@ public DeploymentResponse uploadDeployment(@ApiParam(name = "deploymentKey") @Re





                deploymentBuilder.name(fileName);


            } else {


-                deploymentBuilder.name(deploymentName);


+                deploymentBuilder.name(decodedQueryStrings.get("deploymentName"));


            }





-            if (deploymentKey != null) {


-                deploymentBuilder.key(deploymentKey);


+            if (decodedQueryStrings.containsKey("deploymentKey") || StringUtils.isNotEmpty(decodedQueryStrings.get("deploymentKey"))) {


+                deploymentBuilder.key(decodedQueryStrings.get("deploymentKey"));


            }





            if (tenantId != null) {

@@ -200,4 +205,23 @@ public DeploymentResponse uploadDeployment(@ApiParam(name = "deploymentKey") @Re


            throw new FlowableException(e.getMessage(), e);


        }


    }


+


+    public Map splitQueryString(String queryString) {


+        Map<String, String> queryMap = new HashMap<>();


+        for (String param : queryString.split("&")) {


+            queryMap.put(StringUtils.substringBefore(param, "="), decode(StringUtils.substringAfter(param, "=")));


+        }


+        return queryMap;


+    }


+


+    protected String decode(String string) {


+        if (string != null) {


+            try {


+                return URLDecoder.decode(string, "UTF-8");


+            } catch (UnsupportedEncodingException uee) {


+                throw new IllegalStateException("JVM does not support UTF-8 encoding.", uee);


+            }


+        }


+        return null;


+    }


}

View 

 modules/flowable-ui-admin/src/main/webapp/scripts/app.js


@@ -208,7 +208,7 @@ flowableAdminApp


            // .registerAvailableLanguageKeys(['en'], {


            //     'en-*': 'en'


            // })


-            .useSanitizeValueStrategy('sanitizeParameters')


+            .useSanitizeValueStrategy('escapeParameters')


            .uniformLanguageTag('bcp47')


            .determinePreferredLanguage();





View 

 modules/flowable-ui-idm/flowable-ui-idm-app/src/main/webapp/scripts/idm-app.js


@@ -126,7 +126,7 @@ flowableApp


        // .registerAvailableLanguageKeys(['en'], {


        //     'en-*': 'en'


        // })


-        .useSanitizeValueStrategy('sanitizeParameters')


+        .useSanitizeValueStrategy('escapeParameters')


        .uniformLanguageTag('bcp47')


        .determinePreferredLanguage();


    }])


View 

 modules/flowable-ui-modeler/flowable-ui-modeler-app/src/main/webapp/scripts/app.js


@@ -140,7 +140,7 @@ flowableModeler


        // .registerAvailableLanguageKeys(['en'], {


        //     'en-*': 'en'


        // })


-        .useSanitizeValueStrategy('sanitizeParameters')


+        .useSanitizeValueStrategy('escapeParameters')


        .uniformLanguageTag('bcp47')


        .determinePreferredLanguage();





View 

 modules/flowable-ui-task/flowable-ui-task-app/src/main/webapp/scripts/landing-app.js


@@ -66,7 +66,7 @@ flowableApp


        // .registerAvailableLanguageKeys(['en'], {


        //     'en-*': 'en'


        // })


-        .useSanitizeValueStrategy('sanitizeParameters')


+        .useSanitizeValueStrategy('escapeParameters')


        .uniformLanguageTag('bcp47')


        .determinePreferredLanguage();


    }])


View 

 ...es/flowable-ui-task/flowable-ui-task-app/src/main/webapp/workflow/scripts/workflow-app.js


@@ -112,7 +112,7 @@ flowableApp


        // .registerAvailableLanguageKeys(['en'], {


        //     'en-*': 'en'


        // })


-        .useSanitizeValueStrategy('sanitizeParameters')


+        .useSanitizeValueStrategy('escapeParameters')


        .uniformLanguageTag('bcp47')


        .determinePreferredLanguage();





 

 


转载请注明:分享牛 » flowable框架bug-flowable-ui-admin中文乱码