[英]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.