Nutz 集成Activiti5.17.0 [02]集成流程设计器及汉化
下载 activiti-modeler 源码,里面的方法用nutz重写,然后修改editor-app里面页面和js里对应的路径。
5.17.0汉化文件下载:http://pan.baidu.com/s/1qWlzHDE
细节不多述了,自己动手吧,哇哈哈……
Wizzer's Blog
下载 activiti-modeler 源码,里面的方法用nutz重写,然后修改editor-app里面页面和js里对应的路径。
5.17.0汉化文件下载:http://pan.baidu.com/s/1qWlzHDE
细节不多述了,自己动手吧,哇哈哈……
@SetupBy(value=StartSetup.class)
public class MainModule {
}
private void activitiInit(NutConfig config) { log.info("Activiti Init Start..."); ProcessEngineConfigurationImpl processEngineConfiguration = (ProcessEngineConfigurationImpl) ProcessEngineConfiguration .createStandaloneProcessEngineConfiguration(); processEngineConfiguration.setDataSource(config.getIoc().get(DataSource.class)); processEngineConfiguration.setDatabaseSchemaUpdate("false"); processEngineConfiguration.setJobExecutorActivate(false); processEngineConfiguration.setActivityFontName("宋体"); processEngineConfiguration.setLabelFontName("宋体"); processEngineConfiguration.setXmlEncoding("utf-8"); ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine(); ((Ioc2) config.getIoc()).getIocContext().save("app", "processEngine", new ObjectProxy(processEngine)); ((Ioc2) config.getIoc()).getIocContext().save("app", "repositoryService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getRepositoryService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "runtimeService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getRuntimeService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "taskService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getTaskService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "formService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getFormService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "historyService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getHistoryService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "managementService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getManagementService())); ((Ioc2) config.getIoc()).getIocContext().save("app", "identityService", new ObjectProxy(processEngine.getProcessEngineConfiguration().getIdentityService())); log.info("Activiti Init End."); }
public String getTemplateStr(String template, Map<String, String> para) { StringWriter writer = new StringWriter(); try { RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices(); StringReader reader = new StringReader(template); SimpleNode node = runtimeServices.parse(reader, "Template name"); Template t = new Template(); t.setRuntimeServices(runtimeServices); t.setData(node); t.initDocument(); VelocityContext context = new VelocityContext(); if (para.size() > 0) { for (String key : para.keySet()) { context.put(key, para.get(key)); } } t.merge(context, writer); } catch (Exception e) { throw new RuntimeException("Error commiting transaction! cause:"+ e.getMessage()); } return writer.toString(); } @At("/form") @Ok("vm:template.private.test") public void form(HttpServletRequest req, HttpServletResponse resp) { Map<String, Object> formParams = new HashMap<String, Object>(); formParams.put("formKey", "form/waizhibiaodan/01/01.form"); int timeout = 60 * 1000; String str = Http.post("http://127.0.0.1/test/getFormKey", formParams, timeout); NutMap map = Json.fromJson(NutMap.class, str); String formData = map.getString("data"); Map<String, String> params = new HashMap<String, String>(); params.put("startDate", "2015-04-21"); params.put("endDate", "2015-04-25"); req.setAttribute("formData", getTemplateStr(formData, params)); }
processEngineConfiguration.setActivityFontName(“宋体”);
processEngineConfiguration.setLabelFontName(“宋体”);
windows环境变量:
JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
adb shell
su
chmod 777 /data/local/tcpdump
/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
select a.*
from wx_nickname a
left join (select distinct nickname_id from wx_group_nickname )b on
a.id = b.nickname_id
where b.nickname_id is null
package cn.xuetang.plugin; import android.widget.Toast; import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaPlugin; import org.json.JSONArray; import org.json.JSONException; /** * Created by Wizzer on 14-8-28. */ public class ToastPlugin extends CordovaPlugin { public ToastPlugin() { } public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (this.cordova.getActivity().isFinishing()) return true; if (action.equals("show")) { this.show(args.getString(0)); } else if (action.equals("showlong")) { this.showlong(args.getString(0)); } else { return false; } callbackContext.success(); return true; } public void show(String message) { Toast.makeText(this.cordova.getActivity(), Toast.LENGTH_SHORT).show(); } public void showlong(String message) { Toast.makeText(this.cordova.getActivity(), message, Toast.LENGTH_LONG).show(); } }
<feature name="ToastPlugin"> <param name="android-package" value="cn.xuetang.plugin.ToastPlugin" /> </feature>
注:这里的 feature name ,要和↓↓面讲的的js文件里一致。
/** * Created by Wizzer on 14-8-28. */ cordova.define("cn.xuetang.plugin.ToastPlugin", function(require, exports, module) { var exec = require('cordova/exec'); module.exports = { /** * 一共5个参数 第一个 :成功回调 第二个 :失败回调 第三个 :将要调用的类的配置名字(在config.xml中配置↑↑) 第四个 :调用的方法名(一个类里可能有多个方法 靠这个参数区分) 第五个 :传递的参数 以json的格式 */ show: function(message) { exec(null, null, "ToastPlugin", "show", [message]); }, showlong: function(message) { exec(null, null, "ToastPlugin", "showlong", [message]); } }; });
注:js里两个方法,分别对应类中的两个方法
在 module.exports = [ ] 中追加如下代码:
{ "file": "plugins/toast.js", "id": "cn.xuetang.plugin.ToastPlugin", "merges": [ "navigator.toast" ] }
navigator.toast.show("再点击一次退出"); navigator.toast.showlong("再点击一次退出");
/** * Created by Wizzer on 14-8-28. */ var num = 0; var login = { initialize: function () { this.bindEvents(); }, bindEvents: function () { document.addEventListener('backbutton', this.eventBackButton, false); }, eventBackButton: function () { num++; if (num > 1) { navigator.app.exitApp(); } navigator.toast.show("再点击一次退出"); // 3秒后重新计数 var intervalID = window.setInterval(function() { num=0; window.clearInterval(intervalID); }, 3000); } };
浮动提示插件见:
/?p=3026
.replaceAll(“[^a-zA-Z_\u4e00-\u9fa5]”, “”)
只剩下中文和英文字母了,悲催。
Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\xB7’ for column ‘description’