如何在 运行 和 "indexOf" 函数之前检查 A 变量的类型?

How do I check the type of EL varaible before running an "indexOf" function against it?

如何检查 EL 变量的类型?我想 运行 一个变量上的 indexOf 方法,像这样:

    <c:forEach items="${requestScope}" var="par">
        <c:if test="${par.key.indexOf("_") != 0}">
        ..
    </c:forEach>

但我注意到如果 "par.key" 不是字符串,我会得到以下错误

15:51:55,662 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/ebook].[ebookDispatcher]] (ajp-/127.0.0.1:8009-5) Servlet.service() for servlet ebookDispatcher threw exception: javax.el.ELException: Cannot convert _ of type class java.lang.String to int
    at org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:312) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:283) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:396) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:47) [jbossweb-7.0.17.Final.jar:]
    at javax.el.BeanELResolver.invokeMethod(BeanELResolver.java:729) [jboss-el-api_2.2_spec-1.0.2.Final.jar:1.0.2.Final]
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:467) [jboss-el-api_2.2_spec-1.0.2.Final.jar:1.0.2.Final]
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:246) [jboss-el-api_2.2_spec-1.0.2.Final.jar:1.0.2.Final]
    at org.apache.el.parser.AstValue.getValue(AstValue.java:159) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.parser.AstNotEqual.getValue(AstNotEqual.java:38) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.parser.AstAnd.getValue(AstAnd.java:43) [jbossweb-7.0.17.Final.jar:]
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189) [jbossweb-7.0.17.Final.jar:]

上面 JSP 片段的更准确书写方式是什么?

您需要通过toString()将对象转换为字符串。

<c:forEach items="${requestScope.keySet()}" var="key">
    <c:if test='${key.toString().indexOf("_") != 0}'>
    ..
</c:forEach>