Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用EL+;JSTL?(调用toString())_Java_Jsp_Jstl_El - Fatal编程技术网

Java 如何使用EL+;JSTL?(调用toString())

Java 如何使用EL+;JSTL?(调用toString()),java,jsp,jstl,el,Java,Jsp,Jstl,El,有什么方法可以用EL和JSTL对对象调用toString()吗?(我需要一个枚举的字符串表示形式作为JSP EL表达式中映射的索引。)我希望像${'''+object}这样的东西可以像在java中一样工作,但是EL并没有那么好,而且似乎没有任何函数可以做到这一点 澄清:我有一个变量somemap,它将字符串映射到字符串,还有一个变量someenum,它是一个枚举。我想做一些类似于${somemap[someenum.toString()]}。(当然.toString()不起作用,但什么起作用?您

有什么方法可以用EL和JSTL对对象调用toString()吗?(我需要一个枚举的字符串表示形式作为JSP EL表达式中映射的索引。)我希望像
${'''+object}
这样的东西可以像在java中一样工作,但是EL并没有那么好,而且似乎没有任何函数可以做到这一点


澄清:我有一个变量
somemap
,它将字符串映射到字符串,还有一个变量
someenum
,它是一个枚举。我想做一些类似于
${somemap[someenum.toString()]}
。(当然.toString()不起作用,但什么起作用?

您只需这样做:

${object}
<c:set var="myValue">${someenum}</c:set>
${somemap[myValue]}
它将
为您字符串


编辑:嵌套表达式的解析方式如下:

${object}
<c:set var="myValue">${someenum}</c:set>
${somemap[myValue]}
${someenum}
${somemap[myValue]}

第一行字符串化(使用
toString()
${someenum}
表达式,并将其存储在
myValue
变量中。第二行使用
myValue
对地图进行索引。

可以做一些事情

第一,你可以使用c:set-

<c:set var="nowAString">${yourVar}</c:set>
${yourVar}
您可以做的另一件事是创建自己的EL函数,将其调用为toString,然后在JSTL中调用它。EL函数基本上是与taglib文件连接的静态方法。简单易行

编辑:

真的吗?你真的试过了吗

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
        <%
        pageContext.setAttribute("testDate", new java.util.Date());
        %>

        <c:set var="myVar">${testDate}</c:set>
        testDate = ${testDate}<br/>
        myVar = ${myVar}<br/>
        testDate Class = ${testDate.class}<br/>
        myVar Class = ${myVar.class}<br/>
    </body>
</html>

JSP页面
你好,世界!
${testDate}
testDate=${testDate}
myVar=${myVar}
testDate类=${testDate.Class}
myVar类=${myVar.Class}

jsp2.0tagfile和JSTL函数都很简单。

Will Hartung的答案应该有用。这里有一个“粘贴”不可运行的副本:


试验
映射:${Map}
枚举:${myEnum}
${myEnum}
映射值:${Map[myEnumAsString]}
这将产生:

映射:{BAR=键BAR的值,FOO=键FOO的值}

枚举:FOO

映射值:键FOO的值


(Scriptlet只是用于快速原型设计,不要实际使用!)

我认为在新版本的JSP api中,您可以调用方法,甚至可以使用参数

我刚刚尝试了
${statusColorMap[jobExecution.exitStatus.toString()]}
,效果很好

//In java

public class Foo {
    // Define properties and get/set methods
    private int prop1;
    private String prop2;



    public String toString() {
        String jsonString = ...; /// Convert this object to JSON string
        return jsonString;
    }
}
同样,EL语法
${obj}
将调用
toString()

因此,如果
JSTL
中的对象
foo
foo
的实例。 那么

丑陋但足够简单

<someTag someValue="${yourObject}${''}" ... />


例如,someValue只接受字符串(但声明为java.lang.Object),这样就可以通过字符串连接强制执行它,但我不能在EL表达式中使用它。见我的澄清${somemap[${someenum}]}是不允许的。我已将您问题中的“JSTL”改为“EL”。
${}
事物不是JSTL。这是表达语言(EL)。JSTL是标准的标记库,例如
c:out
c:forEach
,等等。它实际上是EL+JSTL-解决方案不是单独使用EL,而是同时使用EL。您的实际问题是EL,而不是JSTL。JSTL只是一个哑流控制taglib,它对表达式和后端数据(如枚举)一无所知。请参见,
${''+object}
无效,但您可以使用
${'}${object}
我正在使用EL编写JXLS模板。和
toString
方法保存我的一天。谢谢
<someTag someValue="${yourObject}${''}" ... />