Hi David,
your tag seems to not only access the property (which would really be
possible using JSTL out of the box) but to also evaluate the contents of
the property as a JSTL expression.
I am not fluent enough with JSTL to tell whether such a thing is
possible or not with JSTL out of the box.
What I question is the security implication of this feature! Anyone with
content modification rights (not code development rights) could cause
any expression to be executed. This rings a highly red alert.
Any opinions on this ?
Security aside, this is certainly an interesting functionality worth adding.
Regards
Felix
David Trott schrieb:
Hi Tobias,
How would you do this using JSTL?
Here is the test case I tried:
Create a file called html.jsp
--------------------------------------------------------------------------------------------
<[EMAIL PROTECTED] import="org.apache.sling.api.resource.ValueMap" %>
<[EMAIL PROTECTED] prefix="sling" uri="http://sling.apache.org/taglibs/sling/1.0"
%>
<[EMAIL PROTECTED] prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<sling:defineObjects />
<%
request.setAttribute("example", "hello world");
pageContext.setAttribute("vm", resource.adaptTo(ValueMap.class));
%>
<html>
<body>
<h1>Demo using scriptlet</h1>
<%= ((ValueMap) resource.adaptTo(ValueMap.class)).get("myref") %>
<h1>Demo using JSTL</h1>
<c:out value="${vm.myref}"/>
<h1>Demo using evalProperty</h1>
<sling:evalProperty property="myref"/>
</body>
</html>
--------------------------------------------------------------------------------------------
Use Curl to set everything up:
curl -X MKCOL http://admin:[EMAIL PROTECTED]:8888/apps
curl -X MKCOL http://admin:[EMAIL PROTECTED]:8888/apps/foo
curl -X MKCOL http://admin:[EMAIL PROTECTED]:8888/apps/foo/bar
curl -X PUT -d @html.jsp http://admin:[EMAIL PROTECTED]
:8888/apps/foo/bar/html.jsp
curl -F"sling:resourceType=foo/bar" -F'myref=${example}'
http://admin:[EMAIL PROTECTED]:8888/content/mynode
Open browers at: http://mactrott:8888/content/mynode.html
Here is the result:
----------------------------------------------
Demo using scriptlet
${example}
Demo using JSTL
${example}
Demo using evalProperty
hello world
----------------------------------------------
Is there a better way of doing this so that JSTL will evaluate the property?
With regard to your point about direct DB access being "discouraged" this
isn't really an option for me, as I am looking at converting a large app and
pieces are going to need to come from the DB for some time.
However thats not really whats important to me, the goal I am trying to
achieve is to provide an extra level of indirection, whether that be use to
access a DB, a different branch of the JCR or some other data source.
The end goal is basically to be able to build a page using a GUI and just
drop to components on, one to load data from "somewhere" and one to visually
present it.
Thanks,
David
On Wed, Jul 23, 2008 at 2:09 AM, Tobias Bocanegra (JIRA) <[EMAIL
PROTECTED]>wrote:
[
https://issues.apache.org/jira/browse/SLING-577?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12615924#action_12615924]
Tobias Bocanegra commented on SLING-577:
----------------------------------------
this is already possible when using JSTL and binding the properties (i.e
resource.adaptTo(ValueMap.class) to the page context.
directly accessing the DB is discouraged since all content should come from
the repository.