* * @author Bjoern Schiessle * @author Joas Schilling * @author John Molakvoæ (skjnldsv) * @author Lukas Reschke * @author Morris Jobke * @author Roeland Jago Douma * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace OC\Core\Controller; use bantu\IniGetWrapper\IniGetWrapper; use OC\CapabilitiesManager; use OC\Template\JSConfigHelper; use OCP\App\IAppManager; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataDisplayResponse; use OCP\Defaults; use OCP\IConfig; use OCP\IGroupManager; use OCP\IInitialStateService; use OCP\IRequest; use OCP\ISession; use OCP\IURLGenerator; use OCP\IUserSession; use OCP\L10N\IFactory; class OCJSController extends Controller { /** @var JSConfigHelper */ private $helper; /** * OCJSController constructor. * * @param string $appName * @param IRequest $request * @param IFactory $l10nFactory * @param Defaults $defaults * @param IAppManager $appManager * @param ISession $session * @param IUserSession $userSession * @param IConfig $config * @param IGroupManager $groupManager * @param IniGetWrapper $iniWrapper * @param IURLGenerator $urlGenerator * @param CapabilitiesManager $capabilitiesManager * @param IInitialStateService $initialStateService */ public function __construct($appName, IRequest $request, IFactory $l10nFactory, Defaults $defaults, IAppManager $appManager, ISession $session, IUserSession $userSession, IConfig $config, IGroupManager $groupManager, IniGetWrapper $iniWrapper, IURLGenerator $urlGenerator, CapabilitiesManager $capabilitiesManager, IInitialStateService $initialStateService) { parent::__construct($appName, $request); $this->helper = new JSConfigHelper( $l10nFactory->get('lib'), $defaults, $appManager, $session, $userSession->getUser(), $config, $groupManager, $iniWrapper, $urlGenerator, $capabilitiesManager, $initialStateService ); } /** * @NoCSRFRequired * @PublicPage * * @return DataDisplayResponse */ public function getConfig() { $data = $this->helper->getConfig(); return new DataDisplayResponse($data, Http::STATUS_OK, ['Content-type' => 'text/javascript']); } } 10-r Vaadin 6, 7, 8 is a Java framework for modern Java web applications: https://github.com/vaadin/frameworkwww-data
aboutsummaryrefslogtreecommitdiffstats
blob: eac486fc3e4008f5acb3fb16eae36c7520de9e7a (plain)
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
---
title: RPC Calls Between Client- and Server-Side
order: 6
layout: page
---

[[gwt.rpc]]
= RPC Calls Between Client- and Server-Side

Vaadin supports making Remote Procedure Calls (RPC) between a server-side
component and its client-side widget counterpart. RPC calls are normally used
for communicating stateless events, such as button clicks or other user
interaction, in contrast to changing the shared state. Either party can make an
RPC call to the other side. When a client-side widget makes a call, a server
request is made. Calls made from the server-side to the client-side are
communicated in the response of the server request during which the call was
made.

If you use Eclipse and enable the "Full-Fledged" widget in the New Vaadin Widget
wizard, it automatically creates a component with an RPC stub.

[[gwt.rpc.server-side]]
== RPC Calls to the Server-Side

RPC calls from the client-side to the server-side are made through an RPC
interface that extends the [interfacename]#ServerRpc# interface. A server RPC
interface simply defines any methods that can be called through the interface.

For example:


----
public interface MyComponentServerRpc extends ServerRpc {
    public void clicked(String buttonName);
}
----

The above example defines a single [methodname]#clicked()# RPC call, which takes
a [classname]#String# object as the parameter.

You can pass the most common standard Java types, such as primitive and boxed
primitive types, [classname]#String#, and arrays and some collections (
[classname]#List#, [classname]#Set#, and [classname]#Map#) of the supported
types. Also the Vaadin [classname]#Connector# and some special internal types
can be passed.

An RPC method must return void - the widget set compiler should complain if it
doesn't.

[[gwt.rpc.server-side.calling]]
=== Making a Call

Before making a call, you need to instantiate the server RPC object with
[methodname]#RpcProxy.create()#. This is usually done transparently by using [methodname]#getRpcProxy()#. After that, you can make calls through the
server RPC interface that you defined, for example as follows:


----
@Connect(MyComponent.class)
public class MyComponentConnector
       extends AbstractComponentConnector {

    public MyComponentConnector() {
        getWidget().addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                final MouseEventDetails mouseDetails =
                     MouseEventDetailsBuilder
                         .buildMouseEventDetails(
                                 event.getNativeEvent(),
                                 getWidget().getElement());
                MyComponentServerRpc rpc =
                    getRpcProxy(MyComponentServerRpc.class);

                // Make the call
                rpc.clicked(mouseDetails.getButtonName());
            }
        });
    }
}
----


[[gwt.rpc.server-side.handling]]
=== Handling a Call

RPC calls are handled in a server-side implementation of the server RPC
interface. The call and its parameters are serialized and passed to the server
in an RPC request transparently.


----
public class MyComponent extends AbstractComponent {
    private MyComponentServerRpc rpc =
    new MyComponentServerRpc() {
        private int clickCount = 0;
        
        public void clicked(String buttonName) {
            Notification.show("Clicked " + buttonName);
        }
    };

    public MyComponent() {
        ...
        registerRpc(rpc);
    }
}
----