簡體   English   中英

JSTL標記在Javascript調用和HTML元素中返回null / empty

[英]JSTL tags return null/empty in Javascript calls and HTML elements

這確實是一個令人困惑的錯誤,因為它在我正在創建的某些網頁中出現,但在其他網頁中卻沒有出現,盡管從語法上講,這些元素是相同的。

例如,這不會出現:

            <main:uiInputBox
                onDarkBG="${hasDarkBG}"
                name="questionTitle1"
                onblur="pollUpdateQuestion(false, false, true, this);"
                defaultValue="&lt;${field['POLL_FIELD_ENTER_QUESTION']}&gt;"
                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.

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