Package org.zkoss.zuti.zul
Class NavigationModel<T>
java.lang.Object
org.zkoss.zuti.zul.NavigationModel<T>
- Type Parameters:
T- The data type
- All Implemented Interfaces:
Serializable
A model that accepts arbitrary levels and arbitrary items for navigation.
Use with
Apply component.
A typical usage is that you can get each NavigationLevel by NavigationLevel.getChild() recursively.
Usage
Create a newNavigationModel. Add some data by calling put method.
The data is associated with a path. Data is stored like a tree hierarchy.
NavigationModel<String> navModel = new NavigationModel<String>();
navModel.put("Step 1", "step1.zul");
navModel.put("Step 1/Step 1-1", "step1-1.zul");
navModel.put("Step 2", "step2.zul");
navModel.put("Step 2/Step 2-1", "step2-1.zul");
navModel.put("Step 2/Step 2-2", "step2-2.zul");
navModel.put("Step 2/Step 2-2/Step 2-2-1", "step2-2-1.zul");
navModel.put("Step 2/Step 2-2/Step 2-2-2", "step2-2-2.zul");
navModel.put("Step 3", "step3.zul");
By using <apply> tags, we can include and navigate this zul files in a single page.
Calling navigateTo can navigate to the path.
The context is a Map to put something useful.
<apply level1="@load(vm.navModel.root)"
templateURI="@load(level1.current)"
context="@load(level1.context)"/>
By using the same approach, get child level navigation recursively in these included zul files.
<apply level2="@load(level1.child)"
templateURI="@load(level2.current)"
context="@load(level2.context)"/>
Add a link or button to navigate what you want in the same level.
For instance, level1 can be used to navigate through Step 1 to Step 3.
<a label="Step 2"
onClick='level1.setContext(Collections.singletonMap("hello", "world")).navigateTo("Step 2")' />
Path
A path represents the location of an item. For example,Section B/Sub Section C/My Item.
By default it is separated by / symbol and recognized as keys in each level.
Sometimes we may want to use / in the key name. Using a path string could get the unexpected result.
There are another methods that accept String[] instead of path string to avoid this issue.
Events
If the data in the model is changed or the current navigation is changed, the listeners registered byaddEventListener(EventListener) will be invoked.
The event object is NavigationEvent.- Since:
- 8.6.0
- Author:
- rudyhuang
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaddEventListener(org.zkoss.zk.ui.event.EventListener<NavigationEvent<T>> listener) Adds a listener to the list that's notified each time a change to the model occurs.voidAppends the data after the specific path.voidAppends the data after the specific path.protected voidfireEvent(NavigationLevel<T> level, NavigationEvent.Type type, org.zkoss.zuti.zul.NavigationNode<T> node) getRoot()Gets the first navigation level.voidinsertBefore(String[] levels, String key, T data) Inserts the data before the item of specific levels.voidinsertBefore(String path, String key, T data) Inserts the data before the specific path.voidnavigateTo(String key) A shortcut ofgetRoot().navigateTo(String).voidnavigateToByPath(String path) Navigates to the specified path.voidnavigateToByPath(String[] levels) Navigates to the specified levels.Puts the data to the path.Puts the data to the path.Removes the data associated with the specific path.Removes the data associated with the specific levels.voidremoveEventListener(org.zkoss.zk.ui.event.EventListener<NavigationEvent<T>> listener) Removes a listener from the list that's notified each time a change to the model occurs.
-
Constructor Details
-
NavigationModel
public NavigationModel()
-
-
Method Details
-
put
Puts the data to the path. It will replace the data of the path if the previous data associated withpathexists. If any/symbol is included in the path string, it is suggested to callput(String[], Object)instead.- Parameters:
path- a path string. Will be separated into levels by/symbols. LikeA/B/Cdata- a data- Returns:
- the previous data associated with
path, ornullif there was no mapping.
-
put
Puts the data to the path. It will replace the data of the path if the previous data associated withlevelsexists.- Parameters:
levels- an array that contains each level keys as a pathdata- a data- Returns:
- the previous data associated with
levels, ornullif there was no mapping.
-
append
Appends the data after the specific path. If the path is invalid, the appending will be failed. If the key is duplicated in the same level, the appending will be failed, too.- Parameters:
path- a path string. Will be separated into levels by/symbols. LikeA/B/Ckey- an item key. Must be unique in the same leveldata- a data- Throws:
IllegalArgumentException- if the path is invalid, the key is invalid or duplicated in the same level
-
append
Appends the data after the specific path. If the path is invalid, the appending will be failed. If the key is duplicated in the same level, the appending will be failed, too.- Parameters:
levels- an array that contains each level keys as a pathkey- an item key. Must be unique in the same leveldata- a data- Throws:
IllegalArgumentException- if the path is invalid, the key is invalid or duplicated in the same level
-
insertBefore
Inserts the data before the specific path. If the path is invalid, the insertion will be failed. If the key is duplicated in the same level, the insertion will be failed, too.- Parameters:
path- a path string. Will be separated into levels by/symbols. LikeA/B/Ckey- an item key. Must be unique in the same leveldata- a data- Throws:
IllegalArgumentException- if the path is invalid, the key is invalid or duplicated in the same level
-
insertBefore
Inserts the data before the item of specific levels. If the path is invalid, the insertion will be failed. If the key is duplicated in the same level, the insertion will be failed, too.- Parameters:
levels- an array that contains each level keys as a pathkey- an item key. Must be unique in the same leveldata- a data- Throws:
IllegalArgumentException- if the path is invalid, the key is invalid or duplicated in the same level
-
remove
Removes the data associated with the specific path. If the path is navigated currently, the navigation of that level will be changed to the sibling (right or left).- Parameters:
path- a path string. Will be separated into levels by/symbols. LikeA/B/C- Returns:
- the previous data.
- Throws:
IllegalArgumentException- the path is invalid
-
remove
Removes the data associated with the specific levels. If the path is navigated currently, the navigation of that level will be changed to the sibling (right or left).- Parameters:
levels- an array that contains each level keys as a path- Returns:
- the previous data.
- Throws:
IllegalArgumentException- the path is invalid
-
getRoot
Gets the first navigation level.- Returns:
- the first navigation level
-
addEventListener
Adds a listener to the list that's notified each time a change to the model occurs.- Parameters:
listener- Listener object
-
removeEventListener
Removes a listener from the list that's notified each time a change to the model occurs.- Parameters:
listener- Listener object
-