Hello, I have doubts using components, specifically sharing objects, strings, etc between components.
Actually I use the session to store the required data from one component and then I extract it in the another component.
Is there another option to use?
Thanks in advance.
2 Likes
All executions on the HstComponent
instances, hierarchically oraganized in a page, share a single HstRequestContext
object, which can be accessed through either RequestContextProvider.get()
or HstRequest#getRequestContext()
.
And, the execution order on HstCompnoent
instances in the page is “parent to child” when invoking #doBeforeRender()
methods, and the reversed, “child to parent”, when rendering each component using hst templates (e.g, FTL). [1,2]
Therefore, you could try any of the following:
- You can simply set an attribute through
HstRequestContext.setAttribute(...)
in a parent component’s #doBeforeRender()
and get the attribute in descendants.
- Or you can. add a utility class with a static method which uses
RequestContextProvider.get()
to get the current thread’s HstRequestContext
to return the sharable attribute if existing, or create one if not set yet.
Regards,
Woonsan
[1] HST Request Processing - Bloomreach Experience Manager (PaaS/Self-Hosted) - The Fast and Flexible Headless CMS
[2] The HstRequestContext object - Bloomreach Experience Manager (PaaS/Self-Hosted) - The Fast and Flexible Headless CMS
2 Likes
There is one more option:
- If one of the components in the page sets some sharable attributes in
HstRequestContext
in #prepareBeforeRender(...)
method, then all components may see the sharable attributes in #doBeforeRender(...)
method or thereafter. See [1] for details; #prepareBeforeRender()
methods, if existing, are invoked on all components before invoking #doBeforeRender(...)
.
Woonsan
2 Likes