日期:2014-05-17  浏览次数:20721 次

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这样为什么不能解析呢???求大神解答
jsp checkbox el ognl