Hi,
Am newbie to AEM. Am creating pages with component included like <cq:include path="" resourceType="/customComponent"/>. And i created dialog for getting text field and path field value.
And now am trying to access my current node in customComponent.jsp using both way PropertyIterator it = currentNode.getProperties() or resourceResolver.adaptTo(Node.class) but the currentNode throws Null Pointer Exception . Now i need to get all Properties from multi field and path field components. How can i achieve this. Please give me some solution and thanks in advance.
P.S: Am added global.jsp too.
Am got stuck up with this issue.
Thanks,
Mohamedh Nishadh
Solved! Go to Solution.
Views
Replies
Total Likes
Hello,
There are bunch of implicit objects available in your servlet (jsp) when you use global.jsp or explicitly call <cq:defineObjects/> and one of them is "properties" which is a direct map of properties from your current node so you need not require to do currentNode.getProperties() just use properties also refer http://docs.adobe.com/docs/en/cq/5-6-1/developing/components.html
now to access a single value property from node use -String val= properties.get(propertyName, String.class); // will return null if value not available and if you want to prevent from null then pass an empty string instead String.class
to access multivalue property (like multifield) from node then use - String []val=(String[])properties.get(propertyName,String[].class);
Thanks,
Pawan
Hi Nishadh,
Try to give entire path in resource type
Ex :
<cq:include path="mynode" resourceType="myapp/components/somecomponent" />
Views
Replies
Total Likes
This looks like the pages are not properly setup - that is why you are getting nulls on nodes.
As a new user - i highly recommend that you go through this content to learn how to setup an AEM site and pages:
http://docs.adobe.com/docs/en/aem/6-0/develop/the-basics/website.html
If the pages are setup properly - then it works.
Look at this community article that uses the SLign API and get page node properties:
https://helpx.adobe.com/experience-manager/using/using-sling-apis.html
You can even pass nodes from front end component to back end OSGi services and the nodes are not null:
https://helpx.adobe.com/experience-manager/using/passing_nodes.html
Views
Replies
Total Likes
Try to get the property like this
Title : <%=currentNode.getProperty("jcr:title").getString()%>
Views
Replies
Total Likes
As a new user - i recommend that you look at this artilce:
http://docs.adobe.com/docs/en/aem/6-0/develop/the-basics/website.html
Once you properly setup an AEM site and nodes - you will not get NULLs on nodes.
See this artilce on using SLING API to read nodes:
https://helpx.adobe.com/experience-manager/using/using-sling-apis.html
Views
Replies
Total Likes
Hello,
There are bunch of implicit objects available in your servlet (jsp) when you use global.jsp or explicitly call <cq:defineObjects/> and one of them is "properties" which is a direct map of properties from your current node so you need not require to do currentNode.getProperties() just use properties also refer http://docs.adobe.com/docs/en/cq/5-6-1/developing/components.html
now to access a single value property from node use -String val= properties.get(propertyName, String.class); // will return null if value not available and if you want to prevent from null then pass an empty string instead String.class
to access multivalue property (like multifield) from node then use - String []val=(String[])properties.get(propertyName,String[].class);
Thanks,
Pawan
I used String []val=(String[])properties.get(propertyName,String[].class) to retreive value, how do I add value to a multifield?
Views
Replies
Total Likes
You have to create an array of values:
ValueFactory valueFactory = session.getValueFactory();
Node node = session.getNode("/content/path/to/my/node");
Value[] values = new Value[3];
values[0] = valueFactory.createValue("First value");
values[1] = valueFactory.createValue("Second value");
values[2] = valueFactory.createValue("Third value");
node.setProperty("propertyName", values);
alternatively, you may use a String array:
node.setProperty("propertyName", new String[] {"First value", "Second value", "Third value"});
Node :
since node is global , you need to adapt from resource object or from SUBSERVICE session.