2011-01-25 30 views
0

這是一個非常令人困惑的錯誤,因爲它會在我創建的一些網頁中出現,但在其他網頁中卻不會出現,儘管語法上元素是相同的。JSTL標籤在Javascript調用和HTML元素中返回空/空

例如,這顯示不出來:

  <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"]} '); 

我在做什麼錯在這裏,我該如何解決它?

+0

哪裏是你的Javascript?它是在一個單獨的文件?另外,什麼是「場」?它是一個`Map`嗎?如果是這樣,「Map」的關鍵字是什麼類型?它是一個「字符串」嗎? – 2011-01-25 22:30:10

+0

這對於同一服務器中的頁面或不同服務器環境中的應用程序之間是否有所不同?我們在談論什麼版本的JSP servlet引擎? – Pointy 2011-01-25 22:31:50

回答

0

至於EL在自定義標籤中未解決的第一個問題,那不是JSTL(它是那些標籤)。那是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"> 
    
  • .tld文件<main:xxx>標籤庫的必須被聲明爲至少 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"> 
    
  • .tld文件<main:uiInputBox>defaultValue屬性必須與<rtexprvalue>true</rtexprvalue>被標記,以使所述支撐運行時表達式(在EL,那些${}的東西)。

    <attribute> 
        <name>defaultValue</name> 
        <rtexprvalue>true</rtexprvalue> 
    </attribute> 
    

至於EL的JavaScript文件中未解決的第二個問題,好了,解釋很簡單:EL在模板文本一樣,在JSP運行(2.0或更新版本)僅限.jsp擴展名的文件。有幾種方法來得到它反正工作:

  • 重命名.js.jsp和下面的行添加到頁面(最佳解決方案)的頂部:

    <%@page contentType="text/javascript" %> 
    
  • 把那塊JS的而不是JSP頁面的內聯<script>(不推薦,因爲這通常被認爲是不好的做法)。

  • web.xml的JSP的servlet地圖*.js(不推薦,緊,將你的web應用到servletcontainer的具體JspServlet可能不一定對jsp servlet名稱映射)。

    <servlet-mapping> 
        <servlet-name>jsp</servlet-name> 
        <url-pattern>*.js</url-pattern> 
    </servlet-mapping>