1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>qooxdoo » Demo</title>
<link type="text/css" rel="stylesheet" href="../../resource/css/layout.css"/>
<!--[if IE]>
<link type="text/css" rel="stylesheet" href="../../resource/css/layout_ie.css"/>
<![endif]-->
<script type="text/javascript" src="../../script/qx.js"></script>
<script type="text/javascript" src=".qxrpc"></script>
<!-- With the above script, the service URL for a J2EE application can be
automatically determined, no matter on what path it's deployed. -->
</head>
<body>
<script type="text/javascript" src="../../script/layout.js"></script>
<div id="demoDescription">
<p>Test for RPC functionality.</p>
<p>
This test calls a simple echo-style service on the server. The server
method accepts a string and sends back a string that says
"Client said: [input string]".
</p>
</div>
<script type="text/javascript">
// qx.Settings.setCustomOfClass("qx.io.remote.RemoteExchange", "enableDebug", true);
qx.Settings.setCustomOfClass("qx.io.Json", "enableDebug", true);
qx.core.Init.getInstance().defineMain(function() {
var layout1 = new qx.ui.layout.VerticalBoxLayout();
layout1.setTop(40);
layout1.setLeft(20);
layout1.setSpacing(4);
var async = new qx.ui.form.CheckBox("Asynchronous (must be checked if cross-domain is selected)");
layout1.add(async);
var crossDomain = new qx.ui.form.CheckBox("Cross Domain");
layout1.add(crossDomain);
layout1.add(new qx.ui.basic.Label("URL:"));
var defaultURL = qx.io.remote.Rpc.makeServerURL();
if (defaultURL == null) {
defaultURL = "/services/";
}
var url = new qx.ui.form.TextField(defaultURL);
layout1.add(url);
layout1.add(new qx.ui.basic.Label("Service:"));
var service = new qx.ui.form.TextField("qooxdoo.test");
layout1.add(service);
layout1.add(new qx.ui.basic.Label("Method:"));
var method = new qx.ui.form.TextField("echo");
layout1.add(method);
var layout2 = new qx.ui.layout.HorizontalBoxLayout();
layout2.setHeight("auto");
layout2.setVerticalChildrenAlign("middle");
layout2.setSpacing(4);
var message = new qx.ui.form.TextField("Hello");
message.setWidth(200);
layout2.add(message);
var send = new qx.ui.form.Button("Send to server");
layout2.add(send);
var abort = new qx.ui.form.Button("Abort");
abort.setEnabled(false);
layout2.add(abort);
layout1.add(layout2);
// We'll be setting url and service upon execute; no need to do it now.
var rpc = new qx.io.remote.Rpc();
rpc.setTimeout(10000);
var mycall = null;
send.addEventListener("execute", function() {
// Allow the user to reset the URL and Service on each call
rpc.setUrl(url.getValue());
rpc.setServiceName(service.getValue());
rpc.setCrossDomain(crossDomain.isChecked());
if (async.isChecked()) {
send.setEnabled(false);
abort.setEnabled(true);
mycall = rpc.callAsync(function(result, ex, id) {
mycall = null;
if (ex == null) {
alert("Async(" + id + ") result: " + result);
} else {
alert("Async(" + id + ") exception: " + ex);
}
send.setEnabled(true);
abort.setEnabled(false);
}, method.getValue(), message.getValue());
} else {
try {
var result = rpc.callSync(method.getValue(), message.getValue());
alert("Sync result: " + result);
} catch (ex) {
alert("Sync exception: " + ex);
}
}
});
abort.addEventListener("execute", function() {
rpc.abort(mycall);
});
var d = qx.ui.core.ClientDocument.getInstance();
d.add(layout1);
});
</script>
</body>
</html>
|