Inter-Page Communication"
m (remove empty version history (via JWB)) |
|||
(6 intermediate revisions by 3 users not shown) | |||
Line 2: | Line 2: | ||
__TOC__ | __TOC__ | ||
− | + | Communicating among pages in the same desktop is straightforward. First, you can use attributes to share data. Second, you can use events to notify each other. | |
= Identify a Page= | = Identify a Page= | ||
− | To communicate among pages, we have to assign an identifier to the target page. In ZUML, it is done by use of [[ZUML Reference/ZUML/Processing Instructions/page|the page directive]]: | + | To communicate among pages, we have to assign an identifier to the target page. In ZUML, it is done by the use of [[ZUML Reference/ZUML/Processing Instructions/page|the page directive]]: |
<source lang="xml"> | <source lang="xml"> | ||
Line 33: | Line 33: | ||
</source> | </source> | ||
− | In < | + | In <code>zscript</code> and EL expressions, you could use the [[ZUML Reference/EL Expressions/Implicit Objects|implicit objects]]: <code>componentScope</code>, <code>pageScope</code>, <code>desktopScope</code>, <code>sessionScope, requestScope</code> and <code>applicationScope</code>. |
<source lang="xml" > | <source lang="xml" > | ||
Line 55: | Line 55: | ||
</source> | </source> | ||
− | You can also pass the data with the event object. The third parameter in <javadoc method="postEvent(org.zkoss.zk.ui.event.Event)">org.zkoss.zk.ui.event.Events</javadoc> will be put into <javadoc method="getData()">org.zkoss.zk.ui.event.Event</javadoc>. You could the data you want with it. | + | You can also pass the data with the event object. The third parameter in <javadoc method="postEvent(org.zkoss.zk.ui.event.Event)">org.zkoss.zk.ui.event.Events</javadoc> will be put into <javadoc method="getData()">org.zkoss.zk.ui.event.Event</javadoc>. You could pass the data you want with it. |
<source lang="java" > | <source lang="java" > | ||
Line 61: | Line 61: | ||
</source> | </source> | ||
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{ZKDevelopersReferencePageFooter}} | {{ZKDevelopersReferencePageFooter}} |
Latest revision as of 05:54, 6 February 2024
Communicating among pages in the same desktop is straightforward. First, you can use attributes to share data. Second, you can use events to notify each other.
Identify a Page
To communicate among pages, we have to assign an identifier to the target page. In ZUML, it is done by the use of the page directive:
<?page id=" foo"?>
<window id="main"/>
Then we could retrieve it by use of Desktop.getPage(String) or by use of a utility class called Path. For example, the following statements could access the main window above:
comp.getDesktop().getPage("foo").getFellow("main");
Path.getComponent("//foo/main");
As shown, Path.getComponent(String) considers an ID starting with double slashes as a page's ID.
Use Attributes
Each component, page, desktop, session and Web application has an independent map of attributes. It is a good place to share data among components, pages, desktops and even sessions.
In Java , you could use "setAttribute()","removeAttribute()" and "getAttribute()" of Component, Page and so on to share data. Another way is using the scope argument to identify which scope you want to access. (In the following example, assuming comp is a component.)
comp.setAttribute("some","anyObject");
comp.getAttribute("some", comp.DESKTOP_SCOPE);
comp.getDesktop().getAttribute("some"); //is equivalent to previous line
In zscript
and EL expressions, you could use the implicit objects: componentScope
, pageScope
, desktopScope
, sessionScope, requestScope
and applicationScope
.
<window>
<zscript><![CDATA[
desktop.setAttribute("some","anyObject");
desktopScope.get("some");
]]></zscript>
1:${desktopScope["some"]}
</window>
Post and Send Events
You could communicate among pages in the same desktop. The way to communicate is to use the Events.postEvent(Event) or Events.sendEvent(Event) to notify a component in the target page.
For example,
Events.postEvent(new Event("SomethingHappens",
comp.getDesktop().getPage("foo").getFellow("main"));
You can also pass the data with the event object. The third parameter in Events.postEvent(Event) will be put into Event.getData(). You could pass the data you want with it.
Events.postEvent("onTest", target, "this will be send");