如何将 EL 变量传递给 javascript

IT技术 javascript jsp el
2021-03-15 08:59:04

我有一个变量,${bean.name}如何将它传递给 javascript var?我试过了 var name = "${bean.name}"var name = ${bean.name}但它不起作用。

我的想法是把它放在一个隐藏的输入中,就像在一个隐藏的 <input id="test" type="text" value"${bean.name}">

var name = document.getElementById("test").value;

这不起作用要么var name成为字符串"${bean.name}"

笔记。我不能使用 jstl

4个回答

您不能在.js文件中评估 JSTL 仅在.jsp文件中。(除非您重新映射 jsp servlet,但我不建议这样做)。

更好的方法是在 .jsp 中定义变量,包括 .js,并将这些变量作为参数传递给初始化函数。

还要确保你没有 isELIgnored="true"

这不起作用要么 var name 变成字符串“${bean.name}”

确保您正在运行支持 Servlet 2.4 的容器,web.xml并且声明为 Servlet 2.4 或更高版本。

<?xml version="1.0" encoding="UTF-8"?>
<web-app
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">

    <!-- Config here. -->

</web-app>

这样 EL 也可以在模板文本中工作(不需要 JSTL <c:out>)。它是在 Servlet 2.4 / JSP 2.0 中引入的。Tomcat 5.5 是 Servlet 2.4 容器的一个示例。如果您的容器支持更高的 servlet API 版本,例如 2.5 或 3.0,那么您应该声明web.xml符合此版本以使所有最新功能受益。

然后,您还可以在 JSP 中执行以下操作:

<script type="text/javascript">var name = '${bean.name}';</script>

我认为您可以使用函数eval(),如下所示:

var name = eval("${bean.name}");

如果要将 JavaBean 传递给 js var,则应覆盖 toString() 方法。

Bozho 建议的一个例子,我用这种方式登录 facebook。

设想:

我在 application.properties 中有一个属性,我在facebook-login-sdk.js初始化 facebook 登录时需要这个值所以我LoginController通过下面的代码在java中读取它,然后读取它login.jsp并分配一个全局变量applicationFacebookId然后在facebook-login-sdk.js文件中使用这个全局变量

重要说明:在包含 facebook-login-sdk.js 之前阅读变量名称 applicationFacebookId。因为您将使用一个全局变量,所以您想在调用 facebook-login-sdk.js 之前设置它。

应用程序属性

security.application.facebookId=yourApplicationFacebookid

登录控制器.java

@Value("${security.application.facebookId}")
private String applicationFacebookId;

@RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(HttpServletRequest request, Model model) {
        model.addAttribute("applicationFacebookId", applicationFacebookId);
        return "login";
    }

登录.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script>
    var applicationFacebookId = '${applicationFacebookId}';
    //alert('applicationFacebookId:' + applicationFacebookId);
</script>
<title>Login Page</title>
<script src="<c:url value="/static/js/facebook-login-sdk.js" />"></script>
</head>
</html>

facebook-登录-sdk.js

window.fbAsyncInit = function() {
    FB.init({
        appId : applicationFacebookId,
        cookie : true, // enable cookies to allow the server to access
        xfbml : true,
        version : 'v2.7'
    });