2011-01-25 81 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>