...
Most often, the value
attribute is set automatically, since name
attribute usually tells the framework which property to call to set the value
. But, if there is a reason to set the value
directory directly, be advised that value
is an Object NOT a String.
...
Code Block |
---|
| xml |
---|
| xml |
---|
title | Probably wrong! |
---|
|
<s:textfield key="state.label" name="state" value="CAca"/>
|
If a textfield
is passed the value attribute "CAca"
, the framework will look for a property named getCa
. Generally, this is not what we mean. What we mean to do is pass a literal String. In the expression language, literals are placed within quotes
Code Block |
---|
| xml |
---|
| xml |
---|
title | Passing a literal value the right way |
---|
|
<s:textfield key="state.label" name="state" value="%{'CAca'}" />
|
Another approach would be to use the idiom value="'CAca'"
, but, in this case, using the expression notation is recommended.
...
- All String attribute types are parsed for the "%{ ... }" notation.
- All non-String attribute types are not parsed, but evaluated directly as an expression
- The exception to rule #2 is that if the non-String attribute uses the escape notion "{%{}", the notation is ignored as redundant, and the content evaluated.
Note |
---|
Please remember about altSyntax option that can change when value is evaluated as an expression - Alt Syntax |
Expression Language Notations
Code Block |
---|
<p>Username: ${user.username}</p> |
| A JavaBean object in a standard context in Freemarker, Velocity, or JSTL EL (Not OGNL). |
Code Block |
---|
<s:textfield name="username"/> |
| A username property on the Value Stack. |
Code Block |
---|
<s:url id="es" action="Hello">
<s:param name="request_locale">
es
</s:param>
</s:url>
<s:a href="%{es}">Espanol</s:a> |
| Another way to refer to a property placed on the Value Stack. |
Code Block |
---|
<s:property
value="#session.user.username" /> |
| The username property of the User object in the Session context. |
Code Block |
---|
<s:select
label="FooBar" name="foo"
list="#{'username':'trillian',
'username':'zaphod'}" /> |
| A static Map, as in put("username","trillian"). |
Disallowed property names
The following names of property are disallowed:
- parameters
- application
- session
- struts
- request
- servletRequest
- servletResponse
The below code will not work:
Code Block |
---|
|
<s:iterator value="parameters"/>
|
Code Block |
---|
|
public class MyAction {
private String[] parameters;
public String[] getParameters() {
return parameters;
}
}
|