web-dev-qa-db-ja.com

JavaScriptでJSTL変数値を設定するにはどうすればよいですか?

JavaスクリプトでJSTL変数値を設定する方法は?

<script>

 function function1()

 { 

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

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

 }
 </script>

'ser'変数([〜#〜] jstl [〜#〜])の値を ' val1 '(Javaスクリプト)?

34
Tony

異なる環境(サーバー側の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でレンダリングされます。これで、ブラウザはJavascriptコードの実行とともにHTMLをレンダリングします。ブラウザで使用できる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>

お役に立てれば。

45

使用するもう1つのアプローチ。

最初に、ページのどこかで次を定義します。

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

それからJSで、

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

すべてのスクリプトが.jsファイル内にあり、使用可能なjstlがない場合に最適です

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

  }
</script>

これは場合でも機能します jspのどこかに隠し/非隠し入力フィールドを設定してはいけません。

5
Vikram

しないでください。コードでコードを書かないでください。 JSONオブジェクトまたはvarをどこかに記述しますが、賢明なHTTP除算を愛するために、JSTLが提供するvars/propertiesでハードコードされたJavaScript関数またはメソッドを記述しないでください。 JSONの生成はクールです。それで終わるか、UI開発者が嫌いです。

クライアント側で作成されたクラスの途中でパラメーターを設定しているものを見つけるためにJavaScriptを掘り下げなければならなかったと想像してください。それはひどいです。データをやり取りします。データを処理します。しかし、実際のコードを生成しようとしないでください。

2
Erik Reppen

答えとして、私はいいえと言います。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]);

}); 
0
shreedhar bhat

この変数は、システムでjqueryを使用している場合、value="${val1}"内のc:setを使用して設定できます。

0
mohiz tank

通常の文字列連結を使用する必要がありますが、値が有効なXML文字列であることを確認する必要があります。このソースにXMLを記述することをお勧めします http://oreilly.com/pub/h/ 2127 、または必要に応じてjavascriptのAPIを使用して、XMLを helma などとして記述できます。

0
Kronass

オブジェクト全体をjsonに変換することにより、jstlオブジェクト全体をJavascriptオブジェクトとして保存できます。 JavaではJacksonで可能です。

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
Dariush Jafari