簡體   English   中英

如何在javascript中使用scriptlet

[英]How to use scriptlet inside javascript

有人可以測試這個例子並分享結果嗎? http://timothypowell.net/blog/?p=23
當我做:

var myVar = '<% request.getContextPath(); %>';
alert(myVar);

我得到: '<% request.getContextPath(); %>'. '<% request.getContextPath(); %>'.

從'<%request.getContextPath();中刪除封閉的單引號; %>'; 給出了語法錯誤。 如何在js函數中使用scrptlet或expresion?

編輯:此鏈接有一個解釋,幫助我:
http://www.codingforums.com/showthread.php?t=172082

該行代碼必須放在.jsp文件中的HTML <script>標記中。 這樣, JspServlet將處理scriptlet(以及其他JSP / EL特定表達式)。

<script>var myVar = '<%= request.getContextPath() %>';</script>

請注意, <%= %>是打印變量的正確語法, <% %>不會這樣做。

或者,如果要在獨立的.js文件中提供,則需要將其重命名為.jsp並將以下內容添加到文件的頂部(並相應地更改<script src> URL):

<%@page contentType="text/javascript" %>
...
var myVar = '<%= request.getContextPath() %>';

這樣JspServlet將處理它,並且將指示瀏覽器將JSP響應主體解釋為JavaScript而不是HTML。


與具體問題無關,請注意, scriptlet被認為是不好的做法 使用EL。

var myVar = '${pageContext.request.contextPath}';

聽起來您將JSP代碼放在JavaScript頁面中,或者至少放在非JSP頁面中。 Scriptlet只能包含在JSP頁面中(通常配置為* .jsp)。

如果由JSP編譯器處理,所呈現的語句將導致myVar等於'',因為您使用的scriptlet格式<%...%>在標記之間執行Java代碼,但不返回結果。

因此,要使用此標記,您需要手動將值寫入請求輸出流。 要獲得所需的功能,您需要執行以下操作:

  make sure your code is in a JSP page
  use var myVar = '<%= request.getContextPath() %>'; (note the equals sign)

盡管如此,在大多數情況下,scriptlet被視為不好的做法。 在大多數情況下,您應該使用JSTL表達式和自定義標記。

你不能通過給它正常的.js擴展名來運行javascriptscriptlet 但是,您可以為.js提供.jsp的文件擴展名,然后直接鏈接到它:

<script type="text/javascript" src="/script.jsp"></script>

現在你可以在你的javascript使用jsp

var someMessage = "${someMessage}"
var anotherMessage = "${anotherMessage}"/>"

此操作完全有效,因為確定文件是否是javascript文件的是MIME媒體類型。 您可以使用以下命令從JSP設置MIME:

<%@ page contentType="text/javascript" %>
var myVar = '<%=request.getContextPath() %>';
alert(myVar);

你忘了在請求之前輸出=並刪除; 在getContextPath()之后

暫無
暫無

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

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