JSTL标记在Javascript调用和HTML元素中返回null / empty

时间:2011-01-25 22:25:38

标签: javascript html string jsp jstl

这是一个非常令人困惑的错误,因为它出现在我正在创建的一些网页中,但在其他网页中却没有,尽管从语法上讲,这些元素是相同的。

例如,这不显示:

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

我在这里做错了什么,如何解决?

1 个答案:

答案 0 :(得分:0)

至于在自定义标记中未解析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">
    
  • 必须将.tld taglib的<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"> 
    
  • defaultValue的{​​{1}}文件中的.tld属性必须标有<main:uiInputBox>才能启用支持运行时表达式(EL,<rtexprvalue>true</rtexprvalue> 1}}事情)。

    ${}

关于EL文件未在JavaScript文件中解决的第二个问题,嗯,解释非常简单:模板文本中的EL只在JSP(2.0或更新)文件中运行,只有<attribute> <name>defaultValue</name> <rtexprvalue>true</rtexprvalue> </attribute> 扩展名。无论如何,有几种方法可以让它发挥作用:

  • .jsp重命名为.js,并将以下行添加到页面顶部(最佳解决方案):

    .jsp
  • 将这段JS放在JSP页面的内联<%@page contentType="text/javascript" %> 中(不推荐,因为这通常被认为是一种不好的做法)。

  • <script>中的JSP servlet上映射*.js(不推荐,它将您的webapp紧密耦合到servletcontainer的特定JspServlet,它可能不一定映射到{{的servlet名称上) 1}})。

    web.xml