XPages Tip: Accessing a custom control’s custom property from outside of the custom control
If you’ve used custom properties, then you’re aware that the
compositeData object provides access to those properties within the custom control. However, you can also access those properties from outside of the custom control. In this post, I’ll show how.
Accessing a Custom Property from Within a Custom Control
Let’s start with a custom control named
myCC that has a custom property named
myProperty. Here’s what it looks like to include it on an XPage and pass in a value of myValue:
On the custom control, you can refer to that value as
compositeData.myProperty. Here’s an example of a computed field that displays the property value.
Accessing a Custom Property from Outside of a Custom Control
If you have a need to access the a value passed to a custom property of a custom control from outside if the custom control, there are two steps to take:
- Add an id to the custom control instance on the page (so you can refer to it)
- Get the custom control component, retrieve a map of its property values, and then access the property that you need
Here’s an updated example of the custom control implementation on the XPage, with an id attribute added.
<xc:myCC myProperty="myValue" id="ccID"></xc:myCC>
Here’s how to refer to the custom property from the XPage:
This concept will work fine with multiple instances of the same custom control within a page because each instance would be required to have its own unique ID.
A Use Case
Here’s an example where I’ve recently found this useful. I have an application where I have a flexible grid custom control that takes a parameter with the URL for a REST service to supply the data. When I execute a search, I don’t want to reload the entire page — I just want to call the REST service to get the updated results and apply them to the grid.
But the search field exists as part of the application layout, so it’s outside of the grid custom control. Since the grid control is used for several types of grids, the REST service will vary, so I need to read a custom property of the custom control from another place on the page. This allows the Search feature to be reusable like the custom control.