将JSTL变量放入Javascript时获取转义错误

时间:2013-04-26 17:46:20

标签: javascript html jsp jstl

我按照this帖子使用JSTL变量呈现javascript变量:

var size= "<c:out value='${fn:length(orders)}'/>";

然而,不太幸运,我得到这样的例外:

Element type "size" must be followed by either attribute specifications, ">" or "/>".

所以我用

var size= &lt;c:out value='${fn:length(orders)}'/&gt;;
相反,但没有运气。添加双引号后:

var size= "&lt;c:out value='${fn:length(orders)}'/&gt;";

仍然没有工作......那么如何逃避并使其发挥作用?

更新1

jspx看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jsp:root 
    xmlns:c="http://java.sun.com/jsp/jstl/core"
    xmlns:field="urn:jsptagdir:/WEB-INF/tags/form/fields" 
    xmlns:jsp="http://java.sun.com/JSP/Page" 
    xmlns:page="urn:jsptagdir:/WEB-INF/tags/form" 
    xmlns:spring="http://www.springframework.org/tags" 
    xmlns:form="http://www.springframework.org/tags/form" 
    xmlns:fn="http://java.sun.com/jsp/jstl/functions" 
    xmlns:fmt="http://java.sun.com/jsp/jstl/fmt"
    version="2.1">
<div>
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<jsp:output omit-xml-declaration="yes"/>

<page:show>
   <form:form.....
    <!--body of the form -->
   </form:form>
</page:show>

<script type="text/javascript">
    //jquery and so...
    ....
    var size= "<c:out value='${fn:length(orders)}'/>";
    ....
</script>

</div>
</jsp:root>

2 个答案:

答案 0 :(得分:0)

基于the answer of the link of the post,如果您首先根据需要定义变量然后在JavaScript中使用该变量的值,那会更好:

<c:set var="ordersLength" value="${fn:length(orders)}"/>
<script type="text/javascript">
    var size= "<c:out value='${ordersLength}'/>";
</script>

另一种选择是在隐藏字段中设置${fn:length(orders)}的值,并在JavaScript中读取此字段值:

<input type="hidden" id="ordersLength" value="${fn:length(orders)}" />
<script type="text/javascript">
    var size = document.getElementById('ordersLength').value;
</script>

当然,最后一个选项很笨拙,但可以帮助您解决这个问题。

如果这些都不起作用,则意味着您的orders变量未设置,也不是作为请求属性,也不是作为会话属性,也不是作为应用程序属性或页面属性(并且通过答案中提供的代码,我们不是'能够帮助你[尚])。

答案 1 :(得分:0)

您无法使用jspx文件。你可以使用jsp文件。

jspx文件需要格式良好的XML。在处理EL之前验证XML,因此代码失败。

有关更好的探索,请参阅this post