【问题标题】:Problem with appending HTML and JSTL code in a DIV object using jQuery使用 jQuery 在 DIV 对象中附加 HTML 和 JSTL 代码的问题
【发布时间】:2011-06-11 09:46:31
【问题描述】:

会发生什么: 每次单击列表中的项目(单选)时,该对象中的信息都会显示在单独的 div 中。

问题: 我无法让信息显示在单独的 div 上。

应该显示包含列表和预览区域的表格:

<table id="preview" style="width: 100%;" class="border">
    <tr>
        <td style="width: 25%;">
             <!-- List here -->
         </td>
         <td style="width: 75%;">
             <div id="template_preview" style="overflow:auto">
             </div>
         </td>
    </tr>
</table>

加载时会调用:

<script type="text/javascript" language="javascript">
    $(document).ready(function(){
         changePreview();
    });
</script>

changePreview()功能:

function changePreview()
{
    var selectedValueFromListId = $('#listId').val();

    $('#template_preview').html('<c:forEach var="some_var" items="${model.someList}">');
    $('#template_preview').append('<input type="hidden" id="someTemplateId" value="${some_var.someListId}" />');

    var someTemplateId = $('#someTemplateId').val();

    if (selectedValueFromListId == someTemplateId) 
    {
        $('#template_preview').append('test');
        $('#template_preview').append('<c:if test="${some_var.objectOne.objectTwo.objectTwoId == valueOfSomething}">');
        $('#template_preview').append('some text here - <c:out value="${some_var.label}" />');
        $('#template_preview').append('</c:if>');
    }

    $('#template_preview').append('</c:forEach>');
}

我之前没有测试过 jQuery 的 .html().append() 函数,所以我不确定我是否正确使用它们,或者我想要做的事情是否可行。

我希望我已经足够详细地解释了我的问题。我已经尝试在搜索网站中对其进行研究,但到目前为止我还没有找到解决方案。

提前致谢。

【问题讨论】:

  • 您确定以正确的方式获得所选值吗? stackoverflow.com/questions/1643227/… 看到这个。
  • 是的,我确定。为了仔细检查,我使用了您提供给我的链接中的代码,并将其与我已经获得的值进行了比较。都是一样的。
  • 我有点困惑——jQuery 是客户端代码; JSTL 是服务器端代码,它在到达客户端之前被转换为 Java、编译和呈现为 HTML。为什么要使用 jQuery 生成 JSTL 代码?
  • @nrabinowitz - 很抱歉让您感到困惑。我想我没有提到它,但我对使用 jQuery 和 JSTL 编码还很陌生,所以我不知道我问的是不可能的。

标签: javascript jquery html jsp jstl


【解决方案1】:

JavaScript 和 jQuery 在客户端执行,JSTL 在服务器端编译,在 javascript 甚至到达客户端并被执行之前...所以你不能指望用 jQuery 打印一些 'JSTL like' 字符串并期望它工作.

给你的解决方案,是用JSTL控制你写到页面的javascript,而不是相反:

<script type="text/javascript">

 function changePreview() {
    var selectedValueFromListId = $('#listId').val();
    <c:forEach var="some_var" items="${model.someList}">
        $('#template_preview').append('<input type="hidden" id="someTemplateId" value="${some_var.someListId}" />');
        var someTemplateId = $('#someTemplateId').val();

        if (selectedValueFromListId == someTemplateId) {
        $('#template_preview').append('test');
            <c:if test="${some_var.objectOne.objectTwo.objectTwoId == valueOfSomething}">
                $('#template_preview').append('some text here - ${some_var.label}');
            </c:if>
        }

    </c:forEach>
}

</script>

ps。我假设其他一切都很好,我不知道你的模型,所以我无法测试它......

【讨论】:

  • 我明白了。我不知道您也可以在 javascript 中放入 JSTL 代码。这是与 HTML 代码分开还是将其放在 div 标记中(参见示例)?例如
    // 上面的代码在这里
  • 感谢您的回答@pedrofalcaocosta。我不知道 javascript 中的 JSTL 是可能的。接受了你的回答。 :)
  • 请注意,JSTL 不在 JavaScript 中运行。在这种情况下,您使用 JSTL 有条件地生成 JavaScript。然后将 JSTL 转换为 java servlet,然后将该 servlet(编译后)作为 HTML(其中包含 JavaScript)提供,最后该 JavaScript 在客户端浏览器上运行。
  • 抱歉回复晚了。一开始我有点困惑,但你的回答有帮助。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-20
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多