[英]JSTL tags return null/empty in Javascript calls and HTML elements
這確實是一個令人困惑的錯誤,因為它在我正在創建的某些網頁中出現,但在其他網頁中卻沒有出現,盡管從語法上講,這些元素是相同的。
例如,這不會出現:
<main:uiInputBox
onDarkBG="${hasDarkBG}"
name="questionTitle1"
onblur="pollUpdateQuestion(false, false, true, this);"
defaultValue="<${field['POLL_FIELD_ENTER_QUESTION']}>"
styleWidth="280px">
</main:uiInputBox>
標簽${field['POLL_FIELD_ENTER_QUESTION']}
應該返回字符串“輸入問題”。 我不明白的是,標記通常在JSP文件中返回字符串,但是現在在HTML描述符中時才返回。
另一個錯誤是在javascript中,如果我有這樣的功能:
它打印出文字字符串"${field['POLL_FIELD_CHOICE']}"
,而不是它所表示的元素。 例如:
template.find('h2').text('${field["POLL_FIELD_CHOICE"]} ');
我在這里做錯什么,如何解決?
至於EL不能在自定義標簽中解決的第一個問題,那不是JSTL (是那些<c:xxx>
標簽)。 那就是EL(那些${}
東西)。
您似乎在自定義標簽中使用EL。 <main:xxx>
不屬於任何JSP標准標記庫(看起來,這就是JSTL所代表的)。 為了使EL在自定義標簽中也能正常工作,您需要確保以下幾點:
必須將web.xml
至少聲明為Servlet 2.4,這意味着支持此功能的JSP 2.0。
<web-app 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/j2ee/web-app_2_4.xsd" version="2.4">
<main:xxx>
.tld
庫的.tld
文件必須至少聲明為JSP 2.0,其中支持<rtexprvalue>
屬性。
<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/web-jsptaglibrary_2_0.xsd" version="2.0">
<main:uiInputBox>
的.tld
文件中的defaultValue
屬性必須標記為<rtexprvalue>true</rtexprvalue>
才能啟用支持運行時表達式(EL,那些${}
東西)。
<attribute> <name>defaultValue</name> <rtexprvalue>true</rtexprvalue> </attribute>
關於EL文件中沒有解決EL的第二個問題,解釋很簡單:模板文本中的EL僅在擴展名為.jsp
JSP(2.0或更高版本)文件中運行。 有幾種方法可以使其正常工作:
將.js
重命名為.jsp
並將以下行添加到頁面頂部(最佳解決方案):
<%@page contentType="text/javascript" %>
請將那段JS放在JSP頁面的內聯<script>
中(不建議這樣做,因為通常認為這是一種不好的做法)。
將*.js
映射到web.xml
的JSP servlet(不建議這樣做,它會將您的webapp與servlet容器的特定JspServlet緊密耦合,不一定將其映射到jsp
的servlet名稱上)。
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.