EL表达式 使用环境:JSP中
格式:${表达式}
OGNL表达式 使用环境: Strtus2中(Struts2的自定义标签中、struts.xml...)
Struts2的自定义标签的属性值中 %{表达式}// %是为了与EL标签区别,防止冲突
struts.xml中 ${表达式}
语法格式:
%{name}
%{#name}
//上面两个写法的一样的, %{name}表示直接从model里取值, 加上#表示从ActionContext的context里取值,#表示从map里取值
%{#user.name}
#{'k':'v', 'k2':'v2'} 用ognl 构建map
{'e1', 'e2'} 用ognl构建list
%{#{'k':'v', 'k2':'v2'} }
有的时候为什么不用%而用#号呢?
例如:
<s:iterator value="#roleList">
<tr class="TableDetail1 template">
<td>${name} </td>
<td>${description} </td>
<td>
<s:a action="roleAction_delete?id=%{id}" onclick="return delConfirm()">删除</s:a>
<s:a action="roleAction_editUI?id=%{id}">修改</s:a>
<a href="setPrivilegeUI.html">设置权限</a>
</td>
</tr>
</s:iterator>
这里面: <s:iterator value="#roleList"> #roleList 这边本来就是在使用ognl表达式,所以%{}加不加无所谓 即是写成%{#roleList}也不错
但是在<s:a action="roleAction_delete?id=%{id}" onclick="return delConfirm()">删除</s:a> 因为写在""里面受到""影响,为了告诉程序这里要使用ognl表达式故加上%{}来表示,告诉程序这里使用ognl表达式输出