如果表达式语言没有找到对象,应该返回什么?

时间:2013-10-08 10:16:57

标签: el

我在jsp页面编码时出现问题:

<body>
   <script>
      var a = "${testtesttest }"; 
   </script>    
</body>

毫无疑问,“testtesttest”对象必须找不到,但应该返回什么? 在官方文件中,它说:

For example, when evaluating the expression ${product}, the container will look for       product in the page, request, session, and application scopes and will return its value. If product is not found, null is returned. 

http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html

我认为null会被退回,但是,如果我愿意,我不会问问题。 通过firebug,在浏览器中编译后的代码如下:。

<body>
   <script>
      var a = ""; 
   </script>
</body>

为什么不null?结果是什么,我很困惑..

2 个答案:

答案 0 :(得分:1)

${null}确实打印为空字符串。

另见EL specification的第1.18.2章的第二点(A代表“任何对象”):

  

1.18.2将A强制转换为字符串

     
      
  • 如果AString:则返回A
  •   
  • 否则,如果Anull:则返回""
  •   
  • 否则,如果AEnum,请返回A.name()
  •   
  • 否则,如果A.toString()抛出异常,则错误
  •   
  • 否则,请返回A.toString()
  •   

很难给出你想要的答案。如果它实际上打印为null,那么生成的JS代码最终会像var a = "null";那样与var a = null;完全不同。然后,您应该有条件地打印带有或不带引号的JS变量。此外,还不清楚你最终想要做什么。也许知道if (a)在由于JS布尔魔术而成为空字符串时仍会评估false是有帮助的。

答案 1 :(得分:-1)

获取的原因:

<body>
    <script>
        var a = ""; 
    </script>
</body>
当你这样做时,

是:

var a = "${testtesttest }";

真正在做什么:

var a = "null";

被描述的内容:

var a = "";