[ 
https://issues.apache.org/jira/browse/SLING-12302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17840363#comment-17840363
 ] 

Stefan Seifert commented on SLING-12302:
----------------------------------------

the first syntax
{noformat}
${caconfig['com.mysite.core.config.TestConfig/nested'].greeting} {noformat}
should be used.

that the second syntax with {{['nested/greeting']}} is working is probably only 
by chance, as a normal value map is used if not annotation class is used, and 
that supports by default accessing deeper resource hierarchy levels via 
property access. this is not the case if annotation class is used, because 
there the value map is constructed by other means, e.g. to support the default 
values that may be defined in the annotation class.

sidenote: you should not use {{jcr:primaryType="sling:OsgiConfig"}} in context 
of caconfig - it's only use is for defining osgi configurations in the JCR 
repository, so using it here could have unwanted side-effect. just use 
nt:unstructured (unless you are using a different persistence strategy e.g. 
https://wcm.io/caconfig/extensions/ for storing in cq:Page objects).

> CA Config access syntax is inconsistent in HTL
> ----------------------------------------------
>
>                 Key: SLING-12302
>                 URL: https://issues.apache.org/jira/browse/SLING-12302
>             Project: Sling
>          Issue Type: Bug
>            Reporter: Karol Lewandowski
>            Priority: Major
>
> I have a problem understanding how nested configs can be accessed in HTL or 
> if there is a bug in the implementation.
> The 
> [documentation|https://sling.apache.org/documentation/bundles/context-aware-configuration/context-aware-configuration.html#accessing-configuration-from-htlsightly-templates]
>  gives an example:
> {{{}$\{caconfig['x.y.z.ConfigSample']['nestedConfig/stringParam']{}}}}
> However, it doesn't work when a configuration annotation class is defined.
> Steps to reproduce:
> 1. Create a config node:
> {{/conf/we-retail/sling:configs/us/en/sling:configs/com.mysite.core.config.TestConfig}}
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0"; 
> xmlns:jcr="http://www.jcp.org/jcr/1.0";
>           jcr:primaryType="sling:OsgiConfig"
>           email="t...@example.com"
>           enabled="{Boolean}true"
>           number="{Long}123">
>     <nested
>             jcr:primaryType="sling:OsgiConfig"
>             greeting="hello"/>
> </jcr:root>
> {code}
> and reference it from some path.
> 2. Access in HTL without configuration annotation class:
> {code}
> Email: ${caconfig['com.mysite.core.config.TestConfig'].email}
> Number: ${caconfig['com.mysite.core.config.TestConfig'].number}
> Enabled: ${caconfig['com.mysite.core.config.TestConfig'].enabled}
> Greeting (config path): 
> ${caconfig['com.mysite.core.config.TestConfig/nested'].greeting}
> Greeting (property path): 
> ${caconfig['com.mysite.core.config.TestConfig']['nested/greeting']} {code}
> This gives the output:
> {code}
> Email: t...@example.com
> Number: 123
> Enabled: true
> Greeting (config path): hello
> Greeting (property path): hello {code}
> It works as expected.
> 3. Create annotation classes:
> {code:java}
> package com.mysite.core.config;
> import org.apache.sling.caconfig.annotation.Configuration;
> @Configuration
> public @interface TestConfig {
>     String email();
>     int number() default 5;
>     boolean enabled();
>     NestedConfig nested();
> }
> {code}
> and
> {code:java}
> package com.mysite.core.config;
> public @interface NestedConfig {
>     String greeting();
> }
> {code}
> The previous HTL will print:
> {code}
> Email: t...@example.com
> Number: 123
> Enabled: true
> Greeting (config path): hello
> Greeting (property path): {code}
> Accessing nested config value with property name path doesn't work. Is it 
> expected?
> I'm working on support for CA Configs in AEM IDE, so I don't want to make it 
> work in my AEM application but provide the correct syntax support.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to