【问题标题】:JSTL inside jQuery or JavaScriptjQuery 或 JavaScript 中的 JSTL
【发布时间】:2015-01-20 09:56:58
【问题描述】:

我想将数组元素从 Java 代码传递到 jsp 页面,这样如果我单击按钮,它将在页面中显示数组元素。

我尝试在 JavaScript 或 jQuery 中使用 JSTL forEach 标记,但它不起作用,并且在运行程序时我没有收到任何错误!

.jsp页面加入jQuery和JSTL

<%@ taglib prefix="stripes" uri="http://stripes.sourceforge.net/stripes.tld"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="tags" tagdir="/WEB-INF/tags" %>

<stripes:submit name="showData" value="Show" id="button"></stripes:submit>

<script>
    $(document).ready(function() {
        $("button").button().click(function(){
            <c:forEach var="array" items="${actionBean.myArray }">
                <c:out value="${array }"></c:out>
            </c:forEach>
        });
    });
</script>

.jsp页面加入JS和JSTL

<stripes:submit name="showData" value="Show" onClick="myFunc"></stripes:submit>

<c:set var="newVar">
    <c:forEach var="array" items="${actionBean.myArray }">
        <c:out value="${array }"></c:out>
    </c:forEach>
</c:set>

<script type="text/javascript">
    var my_js_data = <c:out value="${newVar}"/>
    function myFunc() {
        return my_js_data;
    }
</script>

【问题讨论】:

    标签: java javascript jquery jsp jstl


    【解决方案1】:

    你是说

    var arr = [];
    <c:forEach var="array" items="${actionBean.myArray }">
    arr.push("<c:out value="${array }"></c:out>");
    </c:forEach>
    
    $(document).ready(function() {
      $("#button").click(function(){
        $("#somecontainer").html(arr.join("<br/>"));
      });
    });
    

    【讨论】:

      【解决方案2】:

      JSP 呈现服务器端,浏览器获取该输出并解析并运行 Javascript。您需要在页面输出中查看源代码,以确保输出的内容是有效的 Javascript。如目前所示,不太可能。

      【讨论】:

        【解决方案3】:

        mplungjans 解决方案已完成,应该是接受的答案。 VPKMatthew Werny 告诉您当前代码有什么问题。

        正如 VPK 表明你没有正确地将数组值分配给 JSTL 变量,但是,他的建议将只分配最新的值,以下应该连接所有

        <c:forEach items="${actionBean.myArray}" var="array" varStatus="stat">
          <c:set var="newVar" value="${stat.first ? '' : newVar} ${array}" />
        </c:forEach>
        

        正如 Matthew 提到的,JSTL 是在服务器端处理的,例如,如果你的数组只包含一个值 test 你最终得到

        var my_js_data = test
        

        而你想要的

        var my_js_data = 'test';
        

        您的完整解决方案是要么按照 mplungjans 所说的去做,要么去做

        <c:forEach items="${actionBean.myArray}" var="array" varStatus="stat">
          <c:set var="newVar" value="${stat.first ? '' : newVar} ${array}" />
        </c:forEach>
        <script type="text/javascript">
            var my_js_data = '<c:out value="${newVar}"/>';
            function myFunc() {
                return my_js_data;
            }
        </script>
        

        注意&lt;c:out value="${newVar}"/&gt; 周围的逗号

        【讨论】:

        • 仍在苦苦挣扎。我试图在 jsp 页面中显示一个简单的字符串值以测试它是否有效,并且它可以正常显示字符串,但不显示数组。也许我的java代码有问题@DefaultHandler public Resolution myDefault() { return new ForwardResolution("/WEB-INF/jsp/import.jsp"); } public Resolution showArray() throws IOException { array.add("a");array.add("b");array.add("c"); return new ForwardResolution("/WEB-INF/jsp/import.jsp"); }
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多