如何在javascript中设置JSTL变量值?

时间:2010-07-20 04:55:58

标签: javascript jsp jstl

如何在java脚本中设置JSTL变量值?

<script>

 function function1()

 { 

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

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

 }
 </script>

如何从' val1 '设置'用户'变量( JSTL )值( Java脚本)?

8 个答案:

答案 0 :(得分:45)

这是不可能的,因为它们是在不同的环境中执行的(服务器端的JSP,客户端的JavaScript)。因此,它们不会按照您在代码中看到的顺序执行。

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

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

此处JSTL代码在服务器端执行,服务器将JavaScript / Html代码视为简单文本。来自JSTL代码(如果有)的生成内容将与您的其他JavaScript / HTML代码一起呈现在生成的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>

希望这有帮助。

答案 1 :(得分:11)

另一种使用方法。

首先,在页面的某处定义以下内容:

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

然后在JS中,做一些与

类似的事情
var someValue = $('#valueHolderId').html();

它适用于所有脚本都在.js文件中并且显然没有jstl可用的情况

答案 2 :(得分:4)

<script ...
  function(){
   var someJsVar = "<c:out value='${someJstLVarFromBackend}'/>";

  }
</script>

这个即使你也没有在jsp中的某个地方设置隐藏/非隐藏的输入字段。

答案 3 :(得分:2)

请不要。不要用代码编写代码。在某处写一个JSON对象或var,但为了爱上明智的HTTP鸿沟,不要编写用JSTL提供的vars / properties硬编码的JavaScript函数或方法。生成JSON很酷。它会在那里结束,或者你的UI开始讨厌你。

想象一下,如果你不得不深入研究JavaScript,找到一些在客户端起源的类中间设置参数的东西。太可怕了。来回传递数据。处理数据。但是不要试图生成实际的代码。

答案 4 :(得分:0)

您必须使用正常的字符串连接,但您必须确保该值是有效的XML字符串,您将找到在此源http://oreilly.com/pub/h/2127中编写XML的好习惯,或者如果您愿意,可以使用例如,javascript中的API将XML写为helma

答案 5 :(得分:0)

如果您在系统中使用了jquery,则可以使用value="${val1}"内的c:set设置此变量。

答案 6 :(得分:0)

作为答案我说不。你只能从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}"/>';

此处$ {u​​ser}是您作为响应获得的数据(来自后端)。

Asigning number / array length

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]);

}); 

答案 7 :(得分:0)

通过将整个对象转换为json,可以将整个jstl对象保存为Javascript对象。这可能是由杰克逊在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>