起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 22647|回复: 19

调用.j文件

  [复制链接]

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
发表于 2013-9-16 15:33:14 | 显示全部楼层 |阅读模式
本帖最后由 song_ning_ning 于 2013-9-17 08:54 编辑

x5给第三方系统提供了两种访问方式:
1.如果通过java文件访问,就调用action;
   可以参考:http://bbs.justep.com/forum.php?mod=viewthread&tid=33841&extra=page%3D1
2.如果通过js文件访问,就调用.j;

在js文件中调用.j
  调用方法: $.ajax({
                                async: <请求方式>  false:同步   true:异步
                                type: <请求方式>,   post    get
                                dataType: <数据类型>,
                                url: <调用.j文件的URL>,
                                data: {
                                        <参数>
                                },
                                error: function(error, status, text) {
                                        <失败后的操作>
                                },
                                success: function(result){
                                        <成功后的操作>
                                }
                        });
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-17 11:34:59 | 显示全部楼层
index.html文件
  1. <!DOCTYPE html>
  2. <head>
  3.         <script type="text/javascript" src="jquery-1.9.1.js"></script>
  4.         <script type="text/javascript" src="md5.js"></script>
  5.         <script>
  6.         
  7. $(window).load(function(){
  8.         if('XDomainRequest' in window && window.XDomainRequest !== null) {
  9.            $.ajaxTransport("+*", function( options, originalOptions, jqXHR ) {
  10.                if (typeof options.crossDomain === 'undefined' || !options.crossDomain) {
  11.                    return;
  12.                }
  13.                 var xdr;
  14.                 return {
  15.                     send: function( headers, completeCallback ) {
  16.                         xdr = new XDomainRequest();
  17.                         var date = new Date().getTime();
  18.                         if(options.url.indexOf('?') != -1){
  19.                                 xdr.open("get", options.url+"&t="+date);        
  20.                         }else{
  21.                                 xdr.open("get", options.url+"?t="+date);
  22.                         }
  23.                         
  24.                         xdr.onload = function() {
  25.                             if(this.contentType.match(/\/xml/)){
  26.                                 var dom = new ActiveXObject("Microsoft.XMLDOM");
  27.                                 dom.async = false;
  28.                                 dom.loadXML(this.responseText);
  29.                                 completeCallback(200, "success", [dom]);
  30.                             } else {
  31.                                 completeCallback(200, "success", [this.responseText]);
  32.                             }
  33.                         };

  34.                         xdr.onprogress = function() {};

  35.                         xdr.ontimeout = function(){
  36.                             completeCallback(408, "error", ["The request timed out."]);
  37.                         };

  38.                         xdr.onerror = function(){
  39.                             completeCallback(404, "error", ["The requested resource could not be found."]);
  40.                         };

  41.                         xdr.send();
  42.                     },
  43.                     abort: function() {
  44.                         if(xdr) xdr.abort();
  45.                     }
  46.                 };
  47.             });
  48.         }
  49.         jQuery.support.cors = true;
  50. });  

  51.                 // 全局变量,记录X5 bsessionid
  52.                 var _x5_session_id = null;
  53.                 // X5登录的请求URL
  54.                 var X5_LOGIN_URL = 'http://192.168.1.102:8080/x5/UI/demo/actions/process/integration/x5Login.j';
  55.                 // X5注销的请求URL
  56.                 var X5_LOGOUT_URL = 'http://192.168.1.102:8080/x5/UI/demo/actions/process/integration/x5Logout.j';
  57.         
  58.                 // 登录并返回bsessionid,判读前一个bsessionid是否过期,过期则重新登录
  59.                 function x5Login(username, password, oldSessionID) {
  60.                         var newSessionID = null;
  61.                         var request = $.ajax({
  62.                                 crossDomain : true,
  63.                                 async: false,
  64.                                 dataType: 'json',
  65.                                 url: X5_LOGIN_URL,
  66.                                 data: {
  67.                                         username: username,
  68.                                         password: hex_md5(password),
  69.                                         bsessionid: oldSessionID
  70.                                 },
  71.                         });
  72.                         request.done(function(result) {
  73.                                 if (result.flag) {
  74.                                         newSessionID = result.bsessionid;
  75.                                         _x5_session_id = newSessionID;
  76.                                 } else {
  77.                                         alert('登录失败:' + result.message);
  78.                                 };
  79.                         });
  80.       
  81.                         request.fail(function(jqXHR, textStatus) {
  82.                                 alert( "请求失败: " + textStatus );
  83.                         });  
  84.                         return newSessionID;
  85.                 }
  86.                 // 注销
  87.                 function x5Logout(bsessionid) {
  88.                         var request = $.ajax({
  89.                                 crossDomain : true,
  90.                                 async: false,
  91.                                 dataType: 'json',
  92.                                 url: X5_LOGOUT_URL + '?bsessionid=' + bsessionid,
  93.                                 data: {},
  94.                         });
  95.                         request.done(function(result) {
  96.                                 if (result.flag) {
  97.                                         alert("X5注销成功!");
  98.                                 } else {
  99.                                         alert('注销失败:' + result.message);
  100.                                 };
  101.                         });
  102.                         request.fail(function(jqXHR, textStatus) {
  103.                                 alert( "请求失败: " + textStatus );
  104.                         });  
  105.                 }

  106.                 // 页面关闭时注销
  107.                 $(window).unload(function() {
  108.                         if (_x5_session_id == null && _x5_session_id == '') {
  109.                                 x5Logout(_x5_session_id);
  110.                         }
  111.                 });

  112.                 // 登录按钮click
  113.                 function btnLoginClick() {
  114.                         // 从页面获取用户名、密码
  115.                         var username = $('#username').val();
  116.                         var password = $('#password').val();
  117.                         _x5_session_id = x5Login(username, password, _x5_session_id);
  118.                         $('#x5SessionID').val(_x5_session_id);
  119.                 }
  120.                 // 注销按钮click
  121.                 function btnLogoutClick() {
  122.                         x5Logout(_x5_session_id);
  123.                 }
  124.                
  125.                 // 打开页面按钮click,在iFrame中打开一个X5功能页面
  126.                 function btnOpenClick() {
  127.                         // 从X5功能页面URL
  128.                         var url = $('#wURL').val();
  129.                         if (_x5_session_id != null && _x5_session_id != '') {
  130.                                 // 在页面URL的后面加上bsessionid
  131.                                 url = (url.indexOf('?') == -1) ? url + '?bsessionid=' + _x5_session_id : url + '&bsessionid=' + _x5_session_id;
  132.                                 // 在iFrame中打开
  133.                                 $('#x5Iframe').attr('src', url);
  134.                         }
  135.                 }
  136.                
  137.                 function closeX5Window() {
  138.                         alert('由外层决定如何关闭X5Window');
  139.                         $('#x5Iframe').attr('src', '');
  140.                 }
  141.         </script>
  142. </head>
  143. <body style="">
  144.         用户:<input id="username" value="system"/> 密码:<input id="password" value="123456"/> x5SessionID:<input id="x5SessionID" value="" style="width: 300px"/>
  145.         <button id="btnLogout" onclick="btnLoginClick();">登录</button>
  146.         <button id="btnLogout" onclick="btnLogoutClick();">注销</button>
  147.         

  148.         

  149.         
  150.         
  151.         页面:<input id="wURL" value="http://192.168.1.102:8080/x5/UI/demo/actions/process/integration/staticActivity1.w" style="width: 600px"/>
  152.         <button id="btnOpen" onclick="btnOpenClick();">打开功能页面</button>
  153.         

  154.         <iframe id="x5Iframe" style="width:100%;height:300px;" onload="this.contentWindow.justep.Portal.closeWindow = closeX5Window;"></iframe>
  155.         

  156.         

  157.         
  158. </body>
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-16 17:09:21 | 显示全部楼层

给.j文件传参

本帖最后由 song_ning_ning 于 2013-9-17 08:58 编辑

给.j文件传参数:
  1. data: {
  2.         username: username,
  3.         password: hex_md5(password),
  4.         bsessionid: oldSessionID
  5. }
复制代码
在.j文件中接收参数:
  1. String bsessionid = request.getParameter("bsessionid");
  2. String username = request.getParameter("username");
  3. String password = request.getParameter("password");
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-17 09:00:31 | 显示全部楼层

取.j返回值

本帖最后由 song_ning_ning 于 2013-9-17 11:29 编辑

.j不调用action返回一个简单类型的值,比如: 15

.j文件
  1.                         response.setCharacterEncoding("UTF-8");
  2.                         int num=15;
  3.                         response.getWriter().write(num);
  4.                         response.flushBuffer();
复制代码
.js文件
  1.                         $.ajax({
  2.                                 async: false,
  3.                                 type: 'POST',
  4.                                 url: '/x5/demo/actions/process/integration/x5Login.j',//被调用.j的URL
  5.                                 error: function(error, status, text) {
  6.                                         alert('登录失败:' + text);
  7.                                 },
  8.                                 success: function(result){
  9.                                         alert(result);//要获取的值  为15
  10.                                 }
  11.                         });
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-17 11:10:46 | 显示全部楼层

.j文件调用action

本帖最后由 song_ning_ning 于 2013-9-18 12:01 编辑

例如:.j调用action  action返回值类型为String    .j返回值类型为json

.j文件
  1.            ActionResult ar = ActionEngine.invokeAction(action, ActionUtils.JSON_CONTENT_TYPE, bsessionID, language, null);
  2.            //.j返回类型指定为:ActionUtils.JSON_CONTENT_TYPE
  3.            response.setCharacterEncoding("UTF-8");
  4.            response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
  5.            System.out.println(ar.getContent().toString());//ar.getContent()中封装了flag
  6.            response.getWriter().write(ar.getContent().toString());
  7.            response.flushBuffer()
复制代码
.js文件
  1.          $.ajax({
  2.                    async: false,
  3.                    type: 'POST',
  4.                    dataType: 'json',
  5.                    url:'/x5/userDefineWidget/userDefineWidget/process/defineWidget/myselfTask.j',
  6.                    error: function(error, status, text) {
  7.                              alert('登录失败:' + text);//这个失败指js没调用成功的失败
  8.                    },
  9.                   success: function(result){
  10.                              if (result.flag) {//这个flage是.j文件传过来值封装好的
  11.                                     alert(result.data.value);//要获得的值
  12.                              } else {
  13.                                      alert('登录失败:' + result.message);//这个失败指.j调用action没成功的失败
  14.                              };
  15.                    }
  16.            });
复制代码
例如:.j调用action  action返回值类型为String    在.j文件中获取返回的值

.j文件
  1.                 ActionResult ar = ActionEngine.invokeAction(action, ActionUtils.JSON_CONTENT_TYPE, "8FE1555F73EF83274E0C02A95681D1F8", language, null);
  2.                 JSONObject obj=(JSONObject) ar.getContent();
  3.                 try {
  4.                         JSONObject data = obj.getJSONObject("data");
  5.                         System.out.println(data.get("value"));//要获取action返回的值
  6.                 } catch (JSONException e) {
  7.                         e.printStackTrace();
  8.                 }
复制代码
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

11

主题

1134

帖子

1261

积分

金牌会员

Rank: 6Rank: 6

积分
1261
QQ
 楼主| 发表于 2013-9-17 11:14:37 | 显示全部楼层

跨域访问

本帖最后由 song_ning_ning 于 2013-9-18 10:20 编辑

系统集成视频中支持了登录x5、打开w页面、注销x5,但是不能跨域访问
在视频中提供的文件的基础上进行修改,可以支持跨域访问
跨域访问.rar中一共包含4个文件,分别是外部系统参照的index.html文件,及index.html文件需要引用的jquery-1.9.1.js文件;
还有在x5中被调用的两个j文件(java文件)
即 /UI/demo/actions/process/integration/x5Login.j
和 /UI/demo/actions/process/integration/x5Logout.j
将rar中的两个java文件替换下面两个文件即可
/UI/demo/actions/process/integration/dsrc/X5Login.java
/UI/demo/actions/process/integration/dsrc/X5Logout.java
注:1.主要在/UI/demo/actions/process/integration/dsrc/X5Login.java和/UI/demo/actions/process/integration/dsrc/X5Logout.java中加了
        response.addHeader("Access-Control-Allow-Origin", "*");
       2.为了兼容浏览器在index.html中加了$(window).load(function()函数
       3.在用ajax调用时候需要加上crossDomain : true

/UI/demo/actions/process/integration/dsrc/X5Login.java
  1. import java.io.IOException;
  2. import java.sql.Date;

  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServletRequest;
  5. import javax.servlet.http.HttpServletResponse;

  6. import org.json.JSONException;
  7. import org.json.JSONObject;

  8. import com.justep.biz.client.ActionEngine;
  9. import com.justep.biz.client.ActionResult;
  10. import com.justep.biz.client.ActionUtils;


  11. public class X5Login extends com.justep.ui.impl.JProcessorImpl  {

  12.         @Override
  13.         public void execute(HttpServletRequest request, HttpServletResponse response)
  14.                         throws ServletException, IOException {
  15.                         
  16.                 JSONObject content = null;
  17.                 String bsessionid = request.getParameter("bsessionid");
  18.                 ActionResult checkResult = ActionEngine.checkSession(bsessionid, ActionUtils.JSON_CONTENT_TYPE);
  19.                 if (checkResult.isSessionTimeOut()) {
  20.                         String username = request.getParameter("username");
  21.                         String password = request.getParameter("password");
  22.                         String ip = request.getRemoteAddr();
  23.                         String language = "zh_CN";
  24.                         Date loginDate = new Date(System.currentTimeMillis());
  25.                         ActionResult actionResult = ActionEngine.login2(username, password, ip, language, loginDate, null, ActionUtils.JSON_CONTENT_TYPE, null);;
  26.                         content = (JSONObject)actionResult.getContent();
  27.                         bsessionid = actionResult.getBSessionID();
  28.                 } else {
  29.                         content = (JSONObject)checkResult.getContent();
  30.                 }

  31.                 try {
  32.                         content.put("bsessionid", bsessionid);
  33.                 } catch (JSONException e) {
  34.                         e.printStackTrace();
  35.                 }
  36.                
  37.                 response.setCharacterEncoding("UTF-8");
  38.                 response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
  39.                 response.addHeader("Access-Control-Allow-Origin", "*");
  40.                 System.out.println("123");
  41.                 response.getWriter().write(content.toString());
  42.                 response.flushBuffer();
  43.         }
  44.         
  45. }
复制代码
/UI/demo/actions/process/integration/dsrc/X5Logout.java
  1. import java.io.IOException;

  2. import javax.servlet.ServletException;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;

  5. import com.justep.biz.client.ActionEngine;
  6. import com.justep.biz.client.ActionResult;
  7. import com.justep.biz.client.ActionUtils;


  8. public class X5Logout extends com.justep.ui.impl.JProcessorImpl  {

  9.         @Override
  10.         public void execute(HttpServletRequest request, HttpServletResponse response)
  11.                         throws ServletException, IOException {
  12.                 String bsessionid = request.getParameter("bsessionid");
  13.                 ActionResult result = ActionEngine.logout(bsessionid, ActionUtils.JSON_CONTENT_TYPE);
  14.                 response.setCharacterEncoding("UTF-8");
  15.                 response.setContentType(ActionUtils.JSON_CONTENT_TYPE);
  16.                 response.addHeader("Access-Control-Allow-Origin", "*");
  17.                 response.getWriter().write(result.getContent().toString());
  18.                 response.flushBuffer();
  19.         }
  20.         
  21. }
复制代码
跨域访问.rar (74.91 KB, 下载次数: 2317)
远程的联系方法QQ2025089647。添加好友时,需要填写论坛账号
发远程时同时也发一下帖子的地址,方便了解要

50

主题

199

帖子

820

积分

高级会员

Rank: 4

积分
820
QQ
发表于 2013-10-23 14:13:49 | 显示全部楼层
song_ning_ning 发表于 2013-9-17 11:14
系统集成视频中支持了登录x5、打开w页面、注销x5,但是不能跨域访问
在视频中提供的文件的基础上进行修改, ...

不好用呀,大哥,你测试好了再发呀!!

14

主题

83

帖子

158

积分

初级会员

Rank: 2

积分
158
QQ
发表于 2013-10-30 17:17:18 | 显示全部楼层
参数传不过去

14

主题

83

帖子

158

积分

初级会员

Rank: 2

积分
158
QQ
发表于 2013-10-31 11:40:56 | 显示全部楼层
重启了机子成功了,谢谢版主

14

主题

83

帖子

158

积分

初级会员

Rank: 2

积分
158
QQ
发表于 2013-11-6 10:35:34 | 显示全部楼层
为什么跨域只能一个用户登录?再登第二个就报用户超限。必须一个退了才能再登一个?
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-11-25 15:36 , Processed in 0.072235 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表