| { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "Sling Fling Sample", |
| "content": "<p>This is a sample using <em>Sling Models</em>, <em>Sling Query</em> and <em>Sling Scripting Thymeleaf</em>.</p><ul><li><a href=\"http://sling.apache.org/documentation/bundles/models.html\">Sling Models</a></li><li><a href=\"https://github.com/Cognifide/Sling-Query\">Sling Query</a></li><li>Sling Scripting Thymeleaf (<a href=\"http://www.thymeleaf.org\">Thymeleaf</a>, <a href=\"http://sling.apache.org/documentation/bundles/internationalization-support-i18n.html\">Sling i18n</a>)</li></ul><p>Additional features used in this sample:</p><ul><li><a href=\"http://sling.apache.org/documentation/the-sling-engine/authentication.html\">Authentication</a>: pages under <em>Authentication</em> (<code>/auth</code>) need authentication</li><li><a href=\"http://sling.apache.org/documentation/bundles/bundle-resources-extensions-bundleresource.html\">Bundle Resources</a>: see <code>Sling-Bundle-Resources</code> in <code>pom.xml</code></li><li><a href=\"http://sling.apache.org/documentation/bundles/content-loading-jcr-contentloader.html\">Content Loading</a>: see <code>Sling-Initial-Content</code> in <code>pom.xml</code></li><li><a href=\"http://sling.apache.org/documentation/development/sling.html\">Maven Sling Plugin</a>: see <code>maven-sling-plugin</code> in <code>pom.xml</code></li></ul>", |
| "models": { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "Sling Models", |
| "content": "<p><em>Sling Models</em> for mapping resources to <code>Page.class</code>:</p><pre>[...]\n@Model(adaptables = Resource.class)\npublic class Page {\n\n private final Resource resource;\n\n @Inject\n private String title;\n\n [...]\n\n public Page(final Resource resource) {\n this.resource = resource;\n }\n\n public String getName() {\n return resource.getName();\n }\n\n [...]\n\n public String getTitle() {\n return title;\n }\n\n [...]\n\n}</pre>" |
| }, |
| "query": { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "Sling Query", |
| "content": "<p><em>Sling Query</em> for collecting resources to build the navigation:</p><pre>[...]\npublic class Page {\n\n [...]\n\n public Iterable<Page> getParents() {\n return $(resource).parents().map(Page.class);\n }\n\n public Iterable<Page> getChildren() {\n return $(resource).children().map(Page.class);\n }\n\n [...]\n\n}</pre>" |
| }, |
| "thymeleaf": { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "Sling Scripting Thymeleaf", |
| "content": "<p><em>Sling Scripting Thymeleaf</em> with <em>Sling Models</em> and <code>adaptTo()</code> to render resources:</p><pre><html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\"\n th:with=\"page=${resource.adaptTo(@org.apache.sling.samples.fling.Page@class)}\">\n<head>\n <meta charset=\"UTF-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"/>\n <title th:text=\"${page.title}\">Page Title</title>\n[...]</pre><p><em>Sling Scripting Thymeleaf</em> with <em>Sling i18n</em> for localized messages:</p><pre><a href=\"/system/sling/logout.html\" th:text=\"#{action.logout}\">logout</a></pre><pre>{\n \"en\": {\n \"jcr:mixinTypes\": [\n \"mix:language\"\n ],\n \"jcr:language\": \"en\",\n \"sling:basename\": \"org.apache.sling.samples.fling\",\n \"action.logout\": {\n \"jcr:primaryType\": \"sling:MessageEntry\",\n \"sling:key\": \"action.logout\",\n \"sling:message\": \"logout\"\n },\n [...]\n }\n}\n</pre>" |
| }, |
| "auth": { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "Authentication", |
| "content": "<p>Authentication</p>", |
| "user": { |
| "jcr:primaryType": "nt:unstructured", |
| "sling:resourceType": "fling:page:simple", |
| "title": "User Profile", |
| "content": "<p>User Profile</p>" |
| } |
| } |
| } |