Struts2中有值栈和堆栈上下文的概念,你用 <s:debug />可以看出。
1、#、%{}、%{#}的作用:
"#"符号:可以取出值栈上下文中存放的对象;
"%{}"符号:可以取出存在值栈中的Action对象,直接调用它的方法;
"%{#}"符号:在域对象中使用。是Struts2为了解决兼容性问题。
2、使用#、%{}、%{#}:
"#"符号:强调从上下文取。
如#parameters.name[0]等价于request.getParameter("name");
如#session.name等价于session.getAttribute("name");
如#request.name等价于request.getAttribute("name")。
"%{}"符号:强调从设定的root点取。
%{}用于计算表达式;
如%{10+20}结果将输出30;
如%{"a"+"b"}结果将输出"ab"。
"%{#}"符号:强调从设定的root点取。
仍然用于计算表达式,只不过操作元可以是变量 。
如定义一个变量:
<s:set name="age" value="%{25}"/>
则%{#age}直接输出25,也可以省略"#",写为%{age} ;
若将age加10,%{#age+10},将输出30。不能省略"#"。也就说变量用于计算时不能省略"#"。