【问题标题】:How to pass an EL variable to javascript如何将EL变量传递给javascript
【发布时间】:2011-03-01 14:32:56
【问题描述】:

我有一个变量${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

【问题讨论】:

  • 你是在尝试将 JSON 传递给 JavaScript 还是什么?
  • 它对我有用。 ;) 你必须更具体地说明它是如何不起作用的。
  • @KJY112 不,我不认为它的 JSON
  • @Bozho 它不起作用,因为我的 name 变量变成了字符串 "${bean.name}" 而不是 bean.name 的实际值
  • @Dave819 - 您是否将代码放入 JSP 解释器未解析的静态文件(可能是 .js 文件?)中?

标签: javascript jsp el


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    这不起作用,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 &lt;c:out&gt;)。它是在 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>
    

    【讨论】:

      【解决方案3】:

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

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

      如果你想将一个 JavaBean 传递给一个 js var,你应该重写 toString() 方法。

      【讨论】:

        【解决方案4】:

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

        场景:

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

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

        application.properties

        security.application.facebookId=yourApplicationFacebookid
        

        LoginController.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";
            }
        

        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-login-sdk.js

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

        【讨论】:

          猜你喜欢
          • 2019-07-07
          • 2020-01-11
          • 2017-04-29
          • 2011-04-09
          • 2011-09-27
          • 2019-03-01
          相关资源
          最近更新 更多