{"inframe":false,"title":"常用代码片断","hidden":false,"roles":{"dev":1},"children":[{"configs":{"serverScript":"//JS和Java类型的不同\n(function() {\n  //字符串\n  var jsString = 'abc',\n    javaString = new JavaString('abc'),\n    result;\n  result = jsString == javaString; //true\n  result = Wb.isEmpty(javaString); //判断是否为空串、null和undefined，通用于JS和Java类型\n  jsString = String(javaString); //Java String转换为JS String\n  javaString = new JavaString(jsString); //JS String转换为Java String\n  javaString = SysUtil.javaString(jsString); //通过映射方式获取\n\n  //数字\n  //Java数字包装类不能参与直接运算（非包装类可以参与直接运算）\n  var jsNum = 123,\n    javaNum = new Integer(456);\n  var numResult = jsNum + javaNum; //Rhino: 123456，Nashorn: 579，因此为通用应该统一改为下述行代码：\n  numResult = jsNum + javaNum.intValue(); //579\n  numResult = jsNum + Number(javaNum); //579\n  var numText = StringUtil.toString(jsNum);\n  javaNum = SysUtil.javaInt(jsNum);\n  //由于上述方法参数为Object型，因此传入参数不固定，Rhino: 123.0(映射为double)，Nashorn: 123(映射为int)\n  //如果要强制转换为Java Int型，可使用方法SysUtil.javaInt(建议使用)或new Integer(jsNum)\n  //如果Java方法参数类型明确，如声明为int, float, double型，那么参数值会自动统一转换为整数值123\n\n  //布尔值\n  var javaBool = new JavaBoolean(false);\n  if (javaBool.booleanValue()) app.info('true');\n  else app.info('false'); //显示为false\n\n  if (javaBool) app.info('true'); //Rhino显示为true，Nashorn显示为false，因此在js中不可直接使用布尔包装类进行判断\n  else app.info('false');\n  javaBool = SysUtil.javaBool(true); //转换为Java Boolean\n  //关于JS类型的语义真假值请参考JS手册\n\n  //日期\n  var jsDate = new Date(); //JS日期\n  var javaDate = new JavaDate(); //Java日期，JavaDate=java.util.Date\n  javaDate = new JavaDate(jsDate.getTime()); //JS Date转换为Java Date\n  jsDate = new Date(javaDate.getTime()); //Java Date转换为 JS Date\n  //调用Java方法时，JS基本类型如string, number, boolean会自动转换为Java类型\n  //JS Date在Rhino中会自动转换为Java Date，在Nashorn中不会转换。因此基于统用性考虑，在调用Java方法传递日期参数时必须使用Java日期类型\n  var text = Wb.dateToStr(jsDate); //JS日期转换为字符串\n  jsDate = Wb.strToDate(text); //字符串转换为JS日期\n  text = DateUtil.dateToStr(javaDate); //Java日期转换为字符串\n  javaDate = DateUtil.strToDate(text); //字符串转换为Java日期\n  text = DateUtil.format(javaDate, 'yyyy-MM-dd HH:mm:ss'); //格式化Java日期\n  text = Wb.format(jsDate, 'yyyy-MM-dd HH:mm:ss'); //格式化JS日期\n\n  //数组\n  var jsArray = [123, 'abc', new Date()]; //JS数组应用到Java方法中会自动转换为Java数组\n  var javaArray = SysUtil.javaArray([123, 'abc', new Date()]);\n  javaArray = SysUtil.javaArray(jsArray); //JS数组转换为Java数组\n  jsArray = Array(javaArray); //Java数组转换为JS数组\n\n  //类参数的混淆\n  //由于JS是无类型的(非显式)，调用Java方法时，系统会自动找相同名称且参数匹配的方法，如果参数不匹配系统会报异常\n  //在调用某些方法名称相同，参数数量相同，且值都为null的方法时会报参数混淆异常，这种情况可以通过编写一个新的名称的Java方法（在Java方法内调用）来解决\n})();\n\n//JSON处理\n(function() {\n  var text, javaObject, javaArray, jsObject = {\n      a: 'foo',\n      b: new Date(),\n      c: 123\n    },\n    jsArray = ['abc', 123, new Date()];\n  text = Wb.encode(jsObject); //把JSON对象转换为字符串\n  jsObject = Wb.decode(text); //把字符串转换成JSON对象\n  javaObject = new org.json.JSONObject(text); //把字符串转换为Java JSONObject\n  text = javaObject.toString(); //把Java JSONObject 转换为 JavaString\n  jsObject = Wb.decode(text); //把JavaString转换为JSON对象\n\n  text = Wb.encode(jsArray); //把JSON数组转换为字符串\n  jsArray = Wb.decode(text); //把字符串转换成JSON数组\n  javaArray = new org.json.JSONArray(text); //把字符串转换为Java JSONArray\n  text = javaArray.toString(); //把Java JSONArray 转换为 JavaString\n  javaArray = Wb.decode(text); //把JavaString转换为JSON数组\n})();\n\n//遍历map\n(function() {\n  var value, items = request.getParameterMap().entrySet().iterator();\n  while (items.hasNext()) {\n    item = items.next();\n    value = item.getKey() + '=' + item.getValue();\n  }\n})();\n\n//调用方法的名称为关键字\n//obj.new()->改为obj['new']();\n//file.delete()->改为file['delete']();\n//所有关键字名称的方法均需按上述方法调用\n\n//异常处理\n(function() {\n  try {\n    //throw 'js error'; //抛出JavaScript异常\n  } catch (e) {\n    //Wb.error('java error'); // 抛出Java异常，建议使用Wb.error方法抛出异常\n  } finally {\n    //进行一些处理\n  }\n})();\n\n//发送数据到客户端\n//使用app.send发送数据将立即进行提交，因此后续发送的数据将不再有效\n//app.send('text');\n//app.send({foo:bar});\n//app.send(anyObject);\n\n//参数获取和设置\n//var jsonObject=app.get()/app.fetch;获取request的parameter/attribute/session attribute值，后者获取到的值自动转换为js类型\n//var myParm=app.get('myParam')/app.fetch('myParam');获取指定名称的parameter/attribute/session attribute值，后者获取到的值自动转换为js类型\n//app.set({foo:'bar',abc:123});//把对象中的值设置到request的attribute\n\napp.send('请参考module serverScript源码');","itemId":"module"},"children":[],"expanded":false,"type":"module"}],"pageLink":"","iconCls":""}