I’m working with Struts 2 and when I’m accessing ValueStack variables I don’t know whether to use % or # or $. I try all of them until I find the correct one.
Can anybody explain what is the difference between them?
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Use of # (pound sign)
OGNL is used to refer to objects in the ActionContext as follows:
objectName: object in the ValueStack (default/root object in the OGNL context), such as an Action property#objectName: object in the ActionContext but outside of the ValueStack, specifically…#objectName: ActionContext object that has been created using the Struts2 data tags with the default action scope (e.g.,<s:set name="foo" value="'Testing'" />, referenced by<s:property value="#foo" />)#parameters.objectName: request parameter#request.objectName: request-scoped attribute#session.objectName: session-scoped attribute#application.objectName: application-scoped attribute#attr.objectName: attribute in page, request, session, or application scope (searched in that order)The scoped map references above (parameters, request, session, and application) can be made one of two ways:
#scopeName.objectNameor#scopeName['objectName']Use of % (percent sign)
%{ OGNL expression }is used to force OGNL evaluation of an attribute that would normally be interpreted as a String literal.Example:
<s:property value="myProperty" default="%{myDynamicDefaultValue}" />Use of @ (at sign)
The @ symbol is used to make references to static properties and methods. Note that you may need to enable this in your Struts2 properties:
struts.ognl.allowStaticMethodAccess=trueExamples:
Use of $ (dollar sign)
Struts2 OGNL does not make special use of the dollar sign. However, it can be used to evaluate normal JSTL expressions. For example:
Struts2:
<h1><s:property value="#pageTitle" /></h1>(is equivalent to…)
JSTL:
<h1>${pageTitle}</h1>