簡體   English   中英

在 JavaScript 中訪問 Java / Servlet / JSP / JSTL / EL 變量

[英]Access Java / Servlet / JSP / JSTL / EL variables in JavaScript

我在 JSP 中有一個表單。 我必須根據請求對象(來自 servlet)來填充它。 如何使用 Java Script 訪問請求對象屬性,或者您是否可以建議我任何其他更好的方法來動態填充表單?

您需要意識到 Java/JSP 僅僅是 HTML/CSS/JS 代碼生成器。 因此,您需要做的就是讓 JSP 打印 Java 變量,就好像它是一個 JavaScript 變量一樣,並且生成的 HTML/JS 代碼輸出在語法上是有效的。

假設 Java 變量在${foo}的 EL 范圍內可用,這里有幾個如何打印它的示例:

<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>

假設 Java 變量的值為"bar" ,那么 JSP 最終會生成這個 HTML,您可以通過右鍵單擊來驗證,在 web 瀏覽器中查看源代碼

<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>

請注意,這些單引號因此是強制性的,以便在 JS 中表示字符串類型的變量。 如果您使用過var foo = ${foo}; 相反,它會打印var foo = bar; ,當您嘗試在 JS 代碼中進一步訪問它時,可能會出現“bar is undefined”錯誤(您可以在瀏覽器的 Web 開發人員工具集的 JS 控制台中看到 JS 錯誤,您可以在 Chrome/FireFox23+/ 中按 F12 打開該工具集) IE9+)。 另請注意,如果變量表示不需要引用的數字或布爾值,那么它就可以正常工作。

如果變量恰好來自用戶控制的輸入,請記住要考慮XSS 攻擊漏洞JS 轉義 我們的 EL wiki 頁面底部附近,您可以找到一個示例如何創建自定義 EL 函數,該函數轉義 Java 變量以便在 JS 中安全使用。

如果變量有點復雜,例如 Java bean 或其列表或映射,那么您可以使用許多可用的JSON 庫之一將 Java 對象轉換為 JSON 字符串。 這是一個假設 Gson 的示例。

String someObjectAsJson = new Gson().toJson(someObject);

請注意,這樣您就不再需要將其打印為帶引號的字符串了。

<script>var foo = ${someObjectAsJson};</script>

也可以看看:

如果您要根據 HTTP 請求中的參數預先填充表單字段,那么為什么不簡單地在 JSP 的服務器端執行此操作……而不是在客戶端使用 JavaScript 呢? 在 JSP 中,它看起來像這樣:

<input type="text" name="myFormField1" value="<%= request.getParameter("value1"); %>"/>

在客戶端,JavaScript 實際上並沒有“請求對象”的概念。 您幾乎必須自己手動解析查詢字符串才能獲取 CGI 參數。 我懷疑這不是你真正想要做的。

在 JSP 文件中:

<head>
...
<%@ page import="com.common.Constants" %>
...
</head>
<script type="text/javascript"> 
        var constant = "<%=Constants.CONSTANT%>"
</script>

然后,此常量變量將可用於在上述代碼之后聲明的 .js 文件。

Constants.java 是一個 java 文件,其中包含一個名為 CONSTANT 的靜態常量。

我的場景是,我需要一個屬性文件中的常量,所以我沒有為 javascript 構建一個屬性文件,而是這樣做了。

將 JSON 從 JSP 傳遞到 Javascript。

我來這里是為了尋找這個,@BalusC 的回答在一定程度上有所幫助,但並沒有解決核心問題。 在深入研究<script>標簽后,我遇到了這個解決方案。

<script id="jsonData" type="application/json">${jsonFromJava}</script>

在 JS 中:

var fetchedJson = JSON.parse(document.getElementById('jsonData').textContent);

在 JSP 頁面中:

<c:set var="list_size" value="${list1.size() }"></c:set>

使用以下命令在 Javascipt 頁面中訪問此值:

var list_size = parseInt($('#list_size').val());

我在外部項目中添加了 javascript 頁面。

暫無
暫無

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

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