Как передать переменную EL в JavaScript - PullRequest
2 голосов
/ 01 марта 2011

У меня есть переменная ${bean.name} как я могу передать ее в переменную javascript? Я пробовал 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 ]

7 голосов
/ 01 марта 2011

Вы не можете оценивать JSTL в .js файлах.Только в .jsp файлах.(если только вы не переназначите сервлет jsp, но я бы не советовал это делать).

Лучшим подходом является определение переменных в .jsp, включая .js, и передача этих переменных в качестве аргументовфункция инициализации.

Также убедитесь, что у вас нет isELIgnored="true"

4 голосов
/ 01 марта 2011

это не работает, либо имя переменной становится строкой "$ {bean.name}"

Убедитесь, что вы используете сервлет 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.Если ваш контейнер поддерживает более высокую версию API сервлета, например, 2.5 или 3.0, вы должны заявить, что web.xml соответствует этой версии, чтобы воспользоваться всеми новейшими функциями.

Затем вы также сможете выполнять следующие действия вJSP:

<script type="text/javascript">var name = '${bean.name}';</script>
0 голосов
/ 06 сентября 2016

Пример предложения Божо, так я работал в Facebook.

Сценарий:

У меня есть свойство в application.properties, и мне нужно это значение в facebook-login-sdk.js. Поэтому я прочитал его в java LoginController с помощью приведенного ниже кода, затем прочитал его в login.jsp и назначил глобальную переменную applicationFacebookId, затем использовал эту глобальную переменную в facebook-login-sdk.js файле.

ВАЖНОЕ ПРИМЕЧАНИЕ: Прочитайте имя переменной applicationFacebookId, прежде чем включать facebook-login-sdk.js. Потому что вы будете использовать глобальную переменную, поэтому вы хотите установить ее до вызова 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-Логин-sdk.js

window.fbAsyncInit = function() {
    FB.init({
        appId : applicationFacebookId,
        cookie : true, // enable cookies to allow the server to access
        xfbml : true,
        version : 'v2.7'
    });
0 голосов
/ 27 января 2015

Я думаю, что вы можете использовать функцию eval () , как показано ниже:

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

, если вы хотите передать JavaBean в js var, вы должны переопределить toString ()способ.

...