[struts-site] branch WW-5307-ognl updated (68f40773e -> 660093b6c)

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git


omit 68f40773e WW-5307 Cleans up OGNL related pages
 new 660093b6c WW-5307 Cleans up OGNL related pages

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (68f40773e)
\
 N -- N -- N   refs/heads/WW-5307-ognl (660093b6c)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 source/tag-developers/ognl.md | 37 -
 1 file changed, 4 insertions(+), 33 deletions(-)



[struts-site] 01/01: WW-5307 Cleans up OGNL related pages

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git

commit 660093b6c401780029b68025628f3e3e1e14ef72
Author: Lukasz Lenart 
AuthorDate: Fri May 19 12:49:23 2023 +0200

WW-5307 Cleans up OGNL related pages
---
 source/tag-developers/ognl-basics.md | 101 ---
 source/tag-developers/ognl.md|  52 --
 2 files changed, 42 insertions(+), 111 deletions(-)

diff --git a/source/tag-developers/ognl-basics.md 
b/source/tag-developers/ognl-basics.md
index 688ab54ab..400087c4a 100644
--- a/source/tag-developers/ognl-basics.md
+++ b/source/tag-developers/ognl-basics.md
@@ -14,11 +14,11 @@ parent:
 
 ## Struts-specific language features
 
-The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under 
+The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under
 the assumption there is only one "root", Struts's ValueStack concept requires 
there be many "roots".
 
-For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map: 
-"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object. 
+For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map:
+"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object.
 The following code illustrates how OGNL deals with these three situations:
 
 ```
@@ -27,17 +27,17 @@ The following code illustrates how OGNL deals with these 
three situations:
 blah  // returns foo.getBlah() because foo is the root
 ```
 
-What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the root, 
-it must be prepended with a namespaces such as @bar. Now let's talk about how 
Struts is a little different...
+What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the
+root, it must be prepended with a namespaces such as @bar. Now let's talk 
about how Struts is a little different...
 
-> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object 
-> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL PropertyAccessor 
-> that will automatically look at the all entries in the stack (from the top 
down) until it finds an object with the property 
-> you are looking for.
+> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object
+> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL
+> PropertyAccessor that will automatically look at the all entries in the 
stack (from the top down) until it finds 
+> an object with the property you are looking for.
 
-For example, suppose the stack contains two objects: Animal and Person. Both 
objects have a "name" property, Animal has 
-a "species" property, and Person has a "salary" property. Animal is on the top 
of the stack, and Person is below it. 
-The follow code fragments help you get an idea of what is going on here:
+For example, suppose the stack contains two objects: `Animal` and `Person`. 
Both objects have a `name` property, 
+`Animal` has a `species` property, and `Person` has a `salary` property. 
`Animal` is on the top of the stack, 
+and `Person` is below it. The follow code fragments help you get an idea of 
what is going on here:
 
 ```
 species// call to animal.getSpecies()
@@ -45,29 +45,30 @@ salary // call to person.getSalary()
 name   // call to animal.getName() because animal is on the top
 ```
 
-In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but 
-sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the ValueStack. 
-All you have to do is:
+In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but
+sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the
+ValueStack. All you have to do is:
 
 ```
 [0].name   // call to animal.getName()
 [1].name   // call to person.getName()
 ```
 
-With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get 
+With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get
 the top of that particular stack cut, use `[0].top`
 
-|ognl expression|description|
-|---|---|
-|`[0].top`|wou

[struts-site] branch asf-staging updated: Updates stage by Jenkins

2023-05-25 Thread git-site-role
This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
 new 7a1302ff9 Updates stage by Jenkins
7a1302ff9 is described below

commit 7a1302ff9a50ac44b4c97031047f2346bb3d70ee
Author: jenkins 
AuthorDate: Thu May 25 07:55:14 2023 +

Updates stage by Jenkins
---
 content/tag-developers/ognl.html | 36 
 1 file changed, 4 insertions(+), 32 deletions(-)

diff --git a/content/tag-developers/ognl.html b/content/tag-developers/ognl.html
index a2f11c32e..bd71b661d 100644
--- a/content/tag-developers/ognl.html
+++ b/content/tag-developers/ognl.html
@@ -135,7 +135,6 @@
 
 
   Collections (Maps, Lists, 
Sets)
-  Lambda Expressions
 
 
 OGNL is the Object Graph Navigation Language (see https://ognl.orphan.software/";>OGNL page for the full 
@@ -194,16 +193,16 @@ we must use the # nota
 Collections (Maps, Lists, Sets)
 
 Dealing with Collections (Maps, Lists, and Sets) in the framework comes 
often, so below please there are a few examples 
-using the select tag. The https://github.com/orphan-oss/ognl/blob/master/docs/LanguageGuide.md#collection-construction";>OGNL
 documentation
+using tags. The https://github.com/orphan-oss/ognl/blob/master/docs/LanguageGuide.md#collection-construction";>OGNL
 documentation
 also includes some examples.
 
-Syntax for list: {e1,e2,e3}. This idiom creates a List containing the 
String “name1”, “name2” and “name3”. It also 
-selects “name2” as the default value.
+Syntax for a list: {e1, 
e2, e3}. This idiom creates a List containing the String “name1”, 
“name2” and “name3”. It also 
+selects “name2” as the default value:
 
 
 
 
-Syntax for map: #{key1:value1,key2:value2}. This idiom creates a map 
that maps the string “foo” to the string 
+Syntax for a map: #{key1:value1, key2:value2}. This idiom creates a map 
that maps the string “foo” to the string 
 “foovalue” and “bar” to the string “barvalue”:
 
 
@@ -239,33 +238,6 @@ selects “name2” as the default value.
 
   ...
 
-
-
-Lambda Expressions
-
-OGNL supports basic lambda expression syntax enabling you to write simple 
functions.
-(Dedicated to all you math majors who didn’t think you would ever see this one 
again.)
-
-Fibonacci:
-if n == 0 
-   return 0;
- elseif n == 1
-   return 1;
- else
-   return fib(n-2) + fib(n-1);
-
-
- fib(0) = 0
- fib(1) = 1
- fib(11) = 89
-
-
-How the expression works
-
-The lambda expression is everything inside the square brackets. The #this variable holds the 
argument to the expression, 
-which in the following example is the number 11 (the code after the 
square-bracketed lambda expression, #fib(11)).
-
-
 
 
   



[struts-site] 01/01: WW-5307 Cleans up OGNL related pages

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git

commit d36ac94b6eec28cf650abfa99d3bb3ba0c28e315
Author: Lukasz Lenart 
AuthorDate: Fri May 19 12:49:23 2023 +0200

WW-5307 Cleans up OGNL related pages
---
 source/tag-developers/ognl-basics.md | 101 ---
 source/tag-developers/ognl.md|  70 +++-
 2 files changed, 52 insertions(+), 119 deletions(-)

diff --git a/source/tag-developers/ognl-basics.md 
b/source/tag-developers/ognl-basics.md
index 688ab54ab..400087c4a 100644
--- a/source/tag-developers/ognl-basics.md
+++ b/source/tag-developers/ognl-basics.md
@@ -14,11 +14,11 @@ parent:
 
 ## Struts-specific language features
 
-The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under 
+The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under
 the assumption there is only one "root", Struts's ValueStack concept requires 
there be many "roots".
 
-For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map: 
-"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object. 
+For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map:
+"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object.
 The following code illustrates how OGNL deals with these three situations:
 
 ```
@@ -27,17 +27,17 @@ The following code illustrates how OGNL deals with these 
three situations:
 blah  // returns foo.getBlah() because foo is the root
 ```
 
-What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the root, 
-it must be prepended with a namespaces such as @bar. Now let's talk about how 
Struts is a little different...
+What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the
+root, it must be prepended with a namespaces such as @bar. Now let's talk 
about how Struts is a little different...
 
-> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object 
-> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL PropertyAccessor 
-> that will automatically look at the all entries in the stack (from the top 
down) until it finds an object with the property 
-> you are looking for.
+> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object
+> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL
+> PropertyAccessor that will automatically look at the all entries in the 
stack (from the top down) until it finds 
+> an object with the property you are looking for.
 
-For example, suppose the stack contains two objects: Animal and Person. Both 
objects have a "name" property, Animal has 
-a "species" property, and Person has a "salary" property. Animal is on the top 
of the stack, and Person is below it. 
-The follow code fragments help you get an idea of what is going on here:
+For example, suppose the stack contains two objects: `Animal` and `Person`. 
Both objects have a `name` property, 
+`Animal` has a `species` property, and `Person` has a `salary` property. 
`Animal` is on the top of the stack, 
+and `Person` is below it. The follow code fragments help you get an idea of 
what is going on here:
 
 ```
 species// call to animal.getSpecies()
@@ -45,29 +45,30 @@ salary // call to person.getSalary()
 name   // call to animal.getName() because animal is on the top
 ```
 
-In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but 
-sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the ValueStack. 
-All you have to do is:
+In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but
+sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the
+ValueStack. All you have to do is:
 
 ```
 [0].name   // call to animal.getName()
 [1].name   // call to person.getName()
 ```
 
-With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get 
+With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get
 the top of that particular stack cut, use `[0].top`
 
-|ognl expression|description|
-|---|---|
-|`[0].to

[struts-site] branch WW-5307-ognl updated (660093b6c -> d36ac94b6)

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git


 discard 660093b6c WW-5307 Cleans up OGNL related pages
 new d36ac94b6 WW-5307 Cleans up OGNL related pages

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (660093b6c)
\
 N -- N -- N   refs/heads/WW-5307-ognl (d36ac94b6)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 source/tag-developers/ognl.md | 18 ++
 1 file changed, 10 insertions(+), 8 deletions(-)



[struts-site] branch asf-staging updated: Updates stage by Jenkins

2023-05-25 Thread git-site-role
This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
 new 99102ea87 Updates stage by Jenkins
99102ea87 is described below

commit 99102ea87c6050a4876267a7cc62333de83caf77
Author: jenkins 
AuthorDate: Thu May 25 07:58:02 2023 +

Updates stage by Jenkins
---
 content/tag-developers/ognl.html | 20 
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/content/tag-developers/ognl.html b/content/tag-developers/ognl.html
index bd71b661d..27f20 100644
--- a/content/tag-developers/ognl.html
+++ b/content/tag-developers/ognl.html
@@ -134,6 +134,8 @@
 OGNL
 
 
+  Context
+  Referencing an Action 
property
   Collections (Maps, Lists, 
Sets)
 
 
@@ -146,10 +148,12 @@ a Map (usually referred as a context map or context). 
OGNL has a notion of there
 the context. In expression, the properties of the root object can be 
referenced without any special “marker” notion. 
 References to other objects are marked with a pound sign (#).
 
-The framework sets the OGNL context to be our ActionContext, and the value 
stack to be the OGNL root object. 
-(The value stack is a set of several objects, but to OGNL it appears to be a 
single object.) Along with the value stack, 
-the framework places other objects in the ActionContext, including Maps 
representing the application, session, 
-and request contexts. These objects coexist in the ActionContext, alongside 
the value stack (our OGNL root).
+Context
+
+The framework sets the OGNL context to be our ActionContext, and the 
ValueStack to be the 
OGNL root object. 
+(The ValueStack is a 
set of several objects, but to OGNL it appears to be a single object). Along 
with the value stack, 
+the framework places other objects in the ActionContext, including maps representing the 
application, session, 
+and request contexts. These objects coexist in the ActionContext, alongside 
the value stack (our OGNL root).
 
 context map---|
   |--application
@@ -168,11 +172,11 @@ and request contexts. These objects coexist in the 
ActionContext, alongside the
   |
 
 
-The Action instance is always pushed onto the value stack. Because the 
Action is on the stack, and the stack is 
-the OGNL root, references to Action properties can omit the # marker. But, to access 
other objects in the ActionContext, 
-we must use the # 
notation so OGNL knows not to look in the root object, but for some other 
object in the ActionContext.
+Referencing an Action property
 
-Referencing an Action property
+The Action instance is always pushed onto the value stack. Because the 
Action is on the stack, and the stack is
+the OGNL root, references to Action properties can omit the # marker. But, to access 
other objects in the ActionContext,
+we must use the # 
notation so OGNL knows not to look in the root object, but for some other 
object in the ActionContext.
 
 
 



[struts-site] branch WW-5307-ognl updated (d36ac94b6 -> d54ebb727)

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a change to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git


 discard d36ac94b6 WW-5307 Cleans up OGNL related pages
 new d54ebb727 WW-5307 Cleans up OGNL related pages

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (d36ac94b6)
\
 N -- N -- N   refs/heads/WW-5307-ognl (d54ebb727)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 source/tag-developers/ognl.md | 20 +++-
 1 file changed, 19 insertions(+), 1 deletion(-)



[struts-site] 01/01: WW-5307 Cleans up OGNL related pages

2023-05-25 Thread lukaszlenart
This is an automated email from the ASF dual-hosted git repository.

lukaszlenart pushed a commit to branch WW-5307-ognl
in repository https://gitbox.apache.org/repos/asf/struts-site.git

commit d54ebb727995741dded8f261d767dea6223f3e9e
Author: Lukasz Lenart 
AuthorDate: Fri May 19 12:49:23 2023 +0200

WW-5307 Cleans up OGNL related pages
---
 source/tag-developers/ognl-basics.md | 101 ---
 source/tag-developers/ognl.md|  76 +++---
 2 files changed, 64 insertions(+), 113 deletions(-)

diff --git a/source/tag-developers/ognl-basics.md 
b/source/tag-developers/ognl-basics.md
index 688ab54ab..400087c4a 100644
--- a/source/tag-developers/ognl-basics.md
+++ b/source/tag-developers/ognl-basics.md
@@ -14,11 +14,11 @@ parent:
 
 ## Struts-specific language features
 
-The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under 
+The biggest addition that Struts provides on top of OGNL is the support for 
the ValueStack. While OGNL operates under
 the assumption there is only one "root", Struts's ValueStack concept requires 
there be many "roots".
 
-For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map: 
-"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object. 
+For example, suppose we are using standard OGNL (not using Struts) and there 
are two objects in the OgnlContext map:
+"foo" -> foo and "bar" -> bar and that the foo object is also configured to be 
the single **root** object.
 The following code illustrates how OGNL deals with these three situations:
 
 ```
@@ -27,17 +27,17 @@ The following code illustrates how OGNL deals with these 
three situations:
 blah  // returns foo.getBlah() because foo is the root
 ```
 
-What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the root, 
-it must be prepended with a namespaces such as @bar. Now let's talk about how 
Struts is a little different...
+What this means is that OGNL allows many objects in the context, but unless 
the object you are trying to access is the
+root, it must be prepended with a namespaces such as @bar. Now let's talk 
about how Struts is a little different...
 
-> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object 
-> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL PropertyAccessor 
-> that will automatically look at the all entries in the stack (from the top 
down) until it finds an object with the property 
-> you are looking for.
+> In Struts, the entire ValueStack is the root object in the context. Rather 
than having your expressions get the object
+> you want from the stack and then get properties from that (ie: peek().blah), 
Struts has a special OGNL
+> PropertyAccessor that will automatically look at the all entries in the 
stack (from the top down) until it finds 
+> an object with the property you are looking for.
 
-For example, suppose the stack contains two objects: Animal and Person. Both 
objects have a "name" property, Animal has 
-a "species" property, and Person has a "salary" property. Animal is on the top 
of the stack, and Person is below it. 
-The follow code fragments help you get an idea of what is going on here:
+For example, suppose the stack contains two objects: `Animal` and `Person`. 
Both objects have a `name` property, 
+`Animal` has a `species` property, and `Person` has a `salary` property. 
`Animal` is on the top of the stack, 
+and `Person` is below it. The follow code fragments help you get an idea of 
what is going on here:
 
 ```
 species// call to animal.getSpecies()
@@ -45,29 +45,30 @@ salary // call to person.getSalary()
 name   // call to animal.getName() because animal is on the top
 ```
 
-In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but 
-sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the ValueStack. 
-All you have to do is:
+In the last example, there was a tie and so the animal's name was returned. 
Usually this is the desired effect, but
+sometimes you want the property of a lower-level object. To do this, XWork has 
added support for indexes on the
+ValueStack. All you have to do is:
 
 ```
 [0].name   // call to animal.getName()
 [1].name   // call to person.getName()
 ```
 
-With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get 
+With expression like `[0] ... [3]` etc. Struts will cut the stack and still 
return back a CompoundRoot object. To get
 the top of that particular stack cut, use `[0].top`
 
-|ognl expression|description|
-|---|---|
-|`[0].

[struts-site] branch asf-staging updated: Updates stage by Jenkins

2023-05-25 Thread git-site-role
This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/struts-site.git


The following commit(s) were added to refs/heads/asf-staging by this push:
 new 36edbabb5 Updates stage by Jenkins
36edbabb5 is described below

commit 36edbabb5c2e4a026a71052aa786a36fbd9e0ba0
Author: jenkins 
AuthorDate: Thu May 25 13:37:38 2023 +

Updates stage by Jenkins
---
 content/tag-developers/ognl.html | 20 ++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/content/tag-developers/ognl.html b/content/tag-developers/ognl.html
index 27f20..ef02d29c8 100644
--- a/content/tag-developers/ognl.html
+++ b/content/tag-developers/ognl.html
@@ -239,11 +239,27 @@ selects “name2” as the default value:
 
 To obtain a subset of just male relatives from the object person:
 
-
+
   ...
-
+
 
 
+You can also use projection to extract just a given property out of a 
bean:
+
+
+  
+
+
+
+it’s the same as using more expressive version:
+
+
+  
+
+
+
+More details can can be found in OGNL documentation about https://ognl.orphan.software/language-guide#projecting-across-collections";>projection.
+