簡體   English   中英

如何在javascript中設置JSTL變量值?

[英]How to set the JSTL variable value in javascript?

如何在Java腳本中設置JSTL變量值?

<script>

 function function1()

 { 

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

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

 }
 </script>

如何從“ val1 ”( Java腳本 )設置“ user ”變量( JSTL )值?

這是不可能的,因為它們是在不同的環境中執行的(服務器端為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>

希望這可以幫助。

還有一種使用方法。

首先,在頁面上的某處定義以下內容:

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

然后在JS中,執行類似

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

當所有腳本都位於.js文件中並且顯然沒有jstl時,它非常有用

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

  }
</script>

即使您在jsp的某處沒有設置隱藏/非隱藏的輸入字段,此方法也有效。

只是不要。 不要用代碼編寫代碼。 在某個地方編寫JSON對象或var,但是為了實現合理的HTTP划分,請勿編寫使用JSTL提供的vars / properties硬編碼的JavaScript函數或方法。 生成JSON很酷。 它到此結束,或者您的UI開發人員討厭您。

想象一下,如果您必須深入JavaScript來查找某些東西,而這些東西正在源自客戶端的類的中間設置參數。 糟透了 來回傳遞數據。 處理數據。 但是不要嘗試生成實際的代碼。

如果在系統中使用了jquery,則可以使用c:set value="${val1}"來設置此變量。

您必須使用普通的字符串連接,但是必須確保該值是有效的XML字符串,您會發現在此源中編寫XML的好習慣http://oreilly.com/pub/h/2127 ,或者您喜歡使用javascript中的API來編寫XML(例如helma)

作為回答,我說不。您只能從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}"/>';

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

}); 

您可以通過將整個jstl對象轉換為json來將其保存為Javascript對象。 Jackson在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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM