OGNL中的特殊字符:
1.#号:
1.1获取context中的数据
<body>
<h1>#号的 </h1>
<h3>获取context中的数据</h3>
<%
request.setAttribute("name","张三");
%>
<s:property value="#request.name"/>
</body>
1.2使用#构建List集合
<s:iterator value="list">
</s:iterator>
如果想上面直接这样写的话,是从值栈中取值的
构建List集合:
<s:iterator value="{'aa','bb','cc'}" var="i">
<s:property value="i"/> <!-- 能将list中的数据遍历出来 -->
</s:iterator>
<!-- 因为使用了var="i" ,这个i只要定义了,那么context区里也有,所以还可以使用下面的方法取值 -->
<s:iterator value="{'aa','bb','cc'}" var="i">
<s:property value="#i"/> <!-- 这是直接从context中取值 -->
</s:iterator>
<!-- 还可以从context域中取值 因为定义了var='entry' -->
<s:iterator value="#{'aa':'11','bb':'22','cc':'33' }" var="entry">
<s:property value="#entry.key"/> -- <s:property value="#entry.value"/>
</s:iterator>
1.2使用#构建Map集合
<!-- 构建map集合 -->
<s:iterator value="#{'aa':'11','bb':'22','cc':'33' }">
<s:property value="key"/> -- <s:property value="value"/>
</s:iterator>
*struts2标签的其它的应用:
<!-- 单选(传统的写法) -->
<input type="radio" name="sex" value="男"/>男
<input type="radio" name="sex" value="女"/>女
<!-- 单选(struts2的标签) -->
<s:radio list="{'男','女'}" name="sex" label="性别"> <!-- 这里的属性为list不是说一定要放list集合 -->
<!-- 如果value的值跟外面文本的值一样的话就用list集合,如果不一样的话,就用map集合 -->
</s:radio>
2.%号:强制解析OGNL(还有强制不解析OGNL)
<h1>%号的用法:</h1>
<!-- 需要将保存的值回显在文本框中 -->
<%
request.setAttribute("name", "张三");
%>
姓名:<s:textfield name="name" value="<s:property value="#request.name"/>"/>
<!-- 这种写法是无效的,struts的标签是不能被嵌套在标签中的 (会报错)-->
</body>
<1-- 如果使用传统的input标签嵌套struts标签是可以的,但是比较长 -->
<input value="<s:property value="#request.name"/>"> 这种嵌套是可以的,但是比较长
下面这种直接在struts标签中取值,是会直接识别成字符串的
姓名:<s:textfield name="name" value="#request.name"/>
这个时候就使用%了,强制识别成ognl表达式
姓名:<s:textfield name="name" value="%{#request.name}"/>
如果是强制不解析的话,就加上单引号,就可以识别成普通的字符串了
<s:property value="%{'#request.name' }"/> 但是这种应用是比较少的.
3.$号:主要用途是在配置文件中使用OGNL,
*属性文件:(在国际化中用)
*xml文件: 文件下载