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スクリプト)?
異なる環境(サーバー側の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>
お役に立てれば。
使用するもう1つのアプローチ。
最初に、ページのどこかで次を定義します。
<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を掘り下げなければならなかったと想像してください。それはひどいです。データをやり取りします。データを処理します。しかし、実際のコードを生成しようとしないでください。
答えとして、私はいいえと言います。jstlからjavascriptへの値しか取得できません。ただし、javascript自体を使用してユーザー名を表示できます。最良の方法はこちらです。ユーザー名を表示するには、次のようなhtmlがある場合
<div id="uName"></div>
次のようにユーザー名を表示できます。
var val1 = document.getElementById('userName').value;
document.getElementById('uName').innerHTML = val1;
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]);
});
この変数は、システムでjqueryを使用している場合、value="${val1}"
内のc:set
を使用して設定できます。
通常の文字列連結を使用する必要がありますが、値が有効なXML文字列であることを確認する必要があります。このソースにXMLを記述することをお勧めします http://oreilly.com/pub/h/ 2127 、または必要に応じてjavascriptのAPIを使用して、XMLを helma などとして記述できます。
オブジェクト全体を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);
}
}
<?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>
<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>
<%@ taglib prefix="uf" uri="http://www.your.url/util-functions" %>
<script>
var myJavaScriptObject = JSON.parse('${uf:toJsonString(myJstlObject)}');
</script>