[英]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
擴展名來運行javascript
的scriptlet
。 但是,您可以為.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.