当前位置: 代码迷 >> Java Web开发 >> EL 与 ognl 的差异
  详细解决方案

EL 与 ognl 的差异

热度:1652   发布时间:2016-04-11 00:06:27.0
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

------解决方案--------------------
value的值#mapList.get('courseId'),解析到单引号时解析就结束了,所以解析会出问题,转义试试#mapList.get(\'courseId\'),ognl并不是很好用,一般用el和jstl
------解决方案--------------------
引用:
<s:property value="#mapList.get(\"courseId\")"/>
应该是这样的
------解决方案--------------------


上面是页面内容显示,下面是源文件
  相关解决方案