Как установить значение переменной JSTL в javascript?
Как установить значение переменной JSTL в java script?
<script>
function function1()
{
var val1 = document.getElementById('userName').value;
<c:set var="user" value=""/> // how do i set val1 here?
}
</script>
Как установить значение переменной пользователя '(JSTL) из' val1 '(Java script)?
Ответы
Ответ 1
Это невозможно, потому что они выполняются в разных средах (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>
Надеюсь, что это поможет.
Ответ 2
еще один подход к использованию.
сначала определите на странице следующее:
<div id="valueHolderId">${someValue}</div>
то в JS просто сделайте что-то похожее на
var someValue = $('#valueHolderId').html();
он отлично работает для случаев, когда все скрипты находятся внутри файлов .js и, очевидно, нет jstl, доступных
Ответ 3
<script ...
function(){
var someJsVar = "<c:out value='${someJstLVarFromBackend}'/>";
}
</script>
Этот работает, даже если у вас нет скрытого/не скрытого поля ввода, установленного где-то в jsp.
Ответ 4
Просто не надо. Не пишите код с кодом. Напишите объект JSON или var где-нибудь, но для любви к разумному разрыву HTTP, не записывайте функции или методы JavaScript, жестко закодированные с помощью vars/properties, предоставляемые JSTL. Создание JSON классно. Он заканчивается там, или ваш пользовательский интерфейс вас ненавидит.
Представьте себе, нужно ли вам копать в JavaScript, чтобы найти то, что задавало параметры в середине класса, созданного на стороне клиента. Это ужасно. Передавайте данные взад и вперед. Обрабатывайте данные. Но не пытайтесь генерировать фактический код.
Ответ 5
Вы должны использовать обычную конкатенацию строк, но вы должны убедиться, что значение является допустимой строкой XML, вы найдете хорошую практику для записи XML в этом источнике http://oreilly.com/pub/h/2127, или если вам нравится, вы можете использовать API в javascript для записи XML как helma для пример.
Ответ 6
Эта переменная может быть установлена с помощью value="${val1}"
внутри c:set
, если вы использовали jquery в своей системе.
Ответ 7
В качестве ответа я говорю "Нет". Вы можете получать значения только от jstl до javascript. Но u может отображать имя пользователя, используя сам javascript.
Лучшие способы здесь.
Чтобы отобразить имя пользователя,
если u имеет html как
<div id="uName"></div>
Вы можете отобразить имя пользователя следующим образом.
var val1 = document.getElementById('userName').value;
document.getElementById('uName').innerHTML = val1;
Чтобы получить данные из jstl в javascript:
var userName = '<c:out value="${user}"/>';
здесь ${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]);
});
Ответ 8
Вы можете сохранить весь объект 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>