JSP EL中LENGTH [...]和fn:length(...)之间的差异

Sam*_*mmy 2 java jsp jstl el

LENGTH[...]和JSTL功能有fn:length(...)什么区别?

我试图搜索差异,但我没有看到任何使用第一个的例子.

这是一个例子:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 
    <td valign="top">
        .....print something
    </td>
</c:when>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 7

由于没有像LENGTH[...]标准JSP/JSTL/EL那样的功能,因此不可能分辨出这些差异.这fn:length()是获得a String,a Object[]或者长度的唯一方法Collection.

${fn:length(someCollection)}
Run Code Online (Sandbox Code Playgroud)

根据您的(固定)示例进行更新:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 
Run Code Online (Sandbox Code Playgroud)

我以前从未见过这个.看起来您的webapp/servletcontainer正在使用自定义EL解析器.如果是这样,您应该看到它已在webapp的web.xml文件中声明.

无论如何,你更喜欢在empty这里使用EL 关键字.它不仅支票null,也为的长度String,Object[]Collection.

<c:when test="${not empty object.field}"> 
Run Code Online (Sandbox Code Playgroud)

不需要在fn:length()这里.


支撑符号[]依次是通过动态键访问属性的方式.例如

${bean[propertyname]}
Run Code Online (Sandbox Code Playgroud)

如果propertyname解析为"foo",那么上面的确有效${bean.foo}.它也经常用在Map范围内的对象上.