EL 与 ognl 的区别
介绍功能背景:SSH框架 ,在JSP中取出session中的List<Map<String,String>> ,然后遍历。并用checkbox控件标记每一行,提交时,把一行中的courseId 提交到Action。
ognl代码:
<s:iterator value="#session['LoadingCourseList']" id="mapList">
<tr>
<td><input name="checkBox" id="checkBox" value="#mapList.get('courseId')" type="checkbox"> </td>
<td><s:property value="#mapList.get('courseId')"/></td>
<td><s:property value="#mapList.get('courseName')"/></td>
<td><s:property value="#mapList.get('teacherName')"/></td>
<td><s:property value="#mapList.get('courseAddress')"/></td>
<td><s:property value="#mapList.get('courseTime')"/></td>
</tr>
</s:iterator>
这样提交的话,生成的_jsp.java文件如下
out.write("\r\n");
out.write("\t\t \t<tr>\r\n");
out.write("\t\t \t\t<td><input name="checkBox" id="checkBox" value="#mapList.get('courseId')" type="checkbox"> </td>\r\n");
out.write("\t\t \t\t\r\n");
out.write("\t\t \t\t<td>");
如此可加,Action中得到的就是 "#mapList.get('courseId')"这个字符串,没有解析
而换成EL则可以解析,并且提交到Action中
jap中代码如下:
<s:iterator value="#session['LoadingCourseList']" id="mapList" var="mapList">
<tr>
<td><input name="checkBox" id="checkBox" value=${mapList.courseId} type="checkbox"> </td>
<td><s:property value="#mapList.get('courseId')"/></td>
<td><s:property value="#mapList.get('courseName')"/></td>
<td><s:property value="#mapList.get('teacherName')"/></td>
<td><s:property value="#mapList.get('courseAddress')"/></td>
<td><s:property value="#mapList.get('courseTime')"/></td>
</tr>
</s:iterator>
生成的_jap.java文件如下
out.write("\r\n");
out.write("\t\t \t<tr>\r\n");
out.write("\t\t \t\t<td><input name="checkBox" id="checkBox" value=");
out.write((java.lang.String) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${mapList.courseId}", java.lang.String.class, (PageContext)_jspx_page_context, null, false));
out.write(" type="checkbox"> </td>\r\n");
out.write("\t\t \t\t\r\n");
out.write("\t\t \t\t<td>");
我想问的是~为什么会出现这种区别,使用ognl这样为什么不能解析呢???求大神解答
上面是页面内容显示,下面是源文件