• 一个EL IF表达式引发的血案


    废话不多说,先上问题.代码描述如下:

    <td class="td-b" width="10%">
      <c:if test="${fn:trim(p.participanttype) eq 'dept' } " >
          执行部门任务
        </c:if>
        <c:if test="${p.participanttype eq 'person'}" >
          执行个人任务
        </c:if>
     </td>

    前提:各个变量的取值都是正确的.

    问题:第一个if 打死都不执行....

    问题分析:

      el表达式 ${fn:trim(p.participanttype) eq 'dept' }的输出结果是ture.

      test的值是"ture ".注意这个地方多了一个空格....这就是罪魁祸首...大爷的

    接下来看一下jsp对于的java文件 是如何解析el表达式的.

     1 //  c:if
     2     org.apache.taglibs.standard.tag.rt.core.IfTag _jspx_th_c_if_0 = (org.apache.taglibs.standard.tag.rt.core.IfTag) _jspx_tagPool_c_if_test.get(org.apache.taglibs.standard.tag.rt.core.IfTag.class);
     3     _jspx_th_c_if_0.setPageContext(_jspx_page_context);
     4     _jspx_th_c_if_0.setParent((javax.servlet.jsp.tagext.Tag) _jspx_th_c_forEach_1);
     5     _jspx_th_c_if_0.setTest(((java.lang.Boolean) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${fn:trim(p.participanttype) eq 'dept' } ", java.lang.Boolean.class, (PageContext)_jspx_page_context, _jspx_fnmap_0, false)).booleanValue());
     6     int _jspx_eval_c_if_0 = _jspx_th_c_if_0.doStartTag();
     7     if (_jspx_eval_c_if_0 != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {
     8       do {
     9         out.write("\r\n");
    10         out.write("\t\t\t\t执行部门任务\r\n");
    11         out.write("\t\t\t");
    12         int evalDoAfterBody = _jspx_th_c_if_0.doAfterBody();
    13         if (evalDoAfterBody != javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN)
    14           break;
    15       } while (true);
    16     }

    注意第五行的proprietaryEvaluate方法,它的参数是"${fn:trim(p.participanttype) eq 'dept' } " 最后包含一个空格,个人分析问题就出在这里.

     

  • 相关阅读:
    [C++] 变量
    [C++] 算术类型
    [C++] 回调函数(转)
    [国嵌攻略][095][脚本编程技术]
    [国嵌攻略][094][守护进程设计]
    [国嵌攻略][093][并发服务器设计]
    [国嵌攻略][092][UDP网络程序设计]
    [国嵌攻略][091][TCP网络程序设计]
    [国嵌攻略][090][linux网络编程模型]
    [国嵌攻略][089][网络协议分析]
  • 原文地址:https://www.cnblogs.com/shihujiang/p/2639727.html
Copyright © 2020-2023  润新知