Как установить значение переменной JSTL в JavaScript? - PullRequest
34 голосов
/ 20 июля 2010

Как установить значение переменной JSTL в java-скрипте?

<script>

 function function1()

 { 

  var val1 = document.getElementById('userName').value;

  <c:set var="user" value=""/>  // how do i set val1 here?   

 }
 </script>

Как установить значение переменной user ( JSTL ) из ' val1 '( Java-скрипт )?

Ответы [ 8 ]

45 голосов
/ 20 июля 2010

Это невозможно, потому что они выполняются в разных средах (JSP на стороне сервера, JavaScript на стороне клиента). Поэтому они не выполняются в последовательности, которую вы видите в своем коде.

var val1 = document.getElementById('userName').value; 

<c:set var="user" value=""/>  // how do i set val1 here? 

Здесь код JSTL выполняется на стороне сервера, и сервер видит коды JavaScript / Html в виде простых текстов. Сгенерированное содержимое из кода JSTL (если есть) будет отображаться в результирующем HTML вместе с другими вашими кодами JavaScript / HTML. Теперь браузер отображает HTML вместе с выполнением кодов Javascript. Теперь запомните, что для браузера нет кода JSTL.

Теперь, например,

<script type="text/javascript">
<c:set var="message" value="Hello"/> 
var message = '<c:out value="${message}"/>';
</script>

Теперь для браузера этот контент отображается,

<script type="text/javascript">
var message = 'Hello';
</script>

Надеюсь, это поможет.

11 голосов
/ 20 июня 2013

еще один подход.

сначала определите где-нибудь на странице следующее:

<div id="valueHolderId">${someValue}</div>

, затем в JS просто сделайте что-то похожее на

var someValue = $('#valueHolderId').html();

отлично работает в тех случаях, когда все скрипты находятся внутри файлов .js и, очевидно, нет доступного jstl

4 голосов
/ 05 ноября 2013
<script ...
  function(){
   var someJsVar = "<c:out value='${someJstLVarFromBackend}'/>";

  }
</script>

Это работает, даже если у вас нет скрытого / не скрытого поля ввода, установленного где-то в jsp.

2 голосов
/ 12 декабря 2012

Просто не надо. Не пишите код с кодом. Напишите где-нибудь объект JSON или переменную, но ради разумного разделения HTTP не пишите функции или методы JavaScript, жестко закодированные с помощью переменных / свойств, предоставляемых JSTL. Генерация JSON это круто. Это заканчивается там, или ваш пользовательский интерфейс ненавидит вас.

Представьте себе, если вам нужно было покопаться в JavaScript, чтобы найти что-то, что устанавливало параметры в середине класса, который возник на стороне клиента. Это ужасно. Передача данных туда и обратно. Обработка данных. Но не пытайтесь генерировать реальный код.

0 голосов
/ 20 февраля 2017

Вы можете сохранить весь объект jstl как объект Javascript, преобразовав весь объект в json.Это возможно Джексоном в Java.

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonUtil{
   public static String toJsonString(Object obj){
      ObjectMapper objectMapper = ...; // jackson object mapper
      return objectMapper.writeValueAsString(obj);
   }
}

/ WEB-INF / tags / util-functions.tld:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib 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/javaee/web-jsptaglibrary_2_1.xsd" 
  version="2.1"> 

  <tlib-version>1.0</tlib-version>
  <uri>http://www.your.url/util-functions</uri>

  <function>
      <name>toJsonString</name>
      <function-class>your.package.JsonUtil</function-class>
      <function-signature>java.lang.String toJsonString(java.lang.Object)</function-signature>
  </function>  

</taglib> 

web.xml

<jsp-config>
  <tablib>
    <taglib-uri>http://www.your.url/util-functions</taglib-uri>
    <taglib-location>/WEB-INF/tags/util-functions.tld</taglib-location>
  </taglib>
</jsp-confi>

mypage.jsp:

<%@ taglib prefix="uf" uri="http://www.your.url/util-functions" %> 

<script>
   var myJavaScriptObject = JSON.parse('${uf:toJsonString(myJstlObject)}');
</script>
0 голосов
/ 06 октября 2016

В ответ я говорю «Нет». Вы можете получить значения только из jstl в javascript.Но вы можете отобразить имя пользователя, используя сам javascript.Лучшие способы здесь.Чтобы отобразить имя пользователя, если у вас есть html как

<div id="uName"></div>

Вы можете отобразить имя пользователя следующим образом.

var val1 = document.getElementById('userName').value;
document.getElementById('uName').innerHTML = val1;

Чтобы получить данные из jstl в ваш javascript:

var userName = '<c:out value="${user}"/>';

здесь $ {пользователь} - это данные, которые вы получаете в ответ (из бэкэнда).

Номер присвоения / длина массива

var arrayLength = <c:out value="${details.size()}"/>;

Дополнительно

function advanced(){
    var values = new Array();
    <c:if test="${empty details.users}">
       values.push("No user found"); 
    </c:if>         

    <c:if test="${!empty details.users}">
        <c:forEach var="user" items="${details.users}" varStatus="stat">
            values.push("${user.name}");   
        </c:forEach>
    </:c:if>
    alert("values[0] "+values[0]);

}); 
0 голосов
/ 13 марта 2013

Эта переменная может быть установлена ​​с помощью value="${val1}" внутри c:set, если вы использовали jquery в вашей системе.

0 голосов
/ 20 июля 2010

Вы должны использовать обычную конкатенацию строк, но вы должны убедиться, что значение является допустимой строкой XML, вы найдете хорошую практику для написания XML в этом источнике http://oreilly.com/pub/h/2127, или, если хотите, можете использоватьAPI в javascript для записи XML, например, helma .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...