小编典典

在jsp中访问JavaScript中的会话变量

jsp

我需要为Google API表提供数据…所以我将其从servlet发送到JSP

但是如何在“ googles” javascript中访问此数据?

我将提供另一种JS(非常简单的JS)的示例,只是让我学习如何使主题说明

    <script>
        function showTable()
        {
            <%
                Object obj = session.getAttribute("list");
                List<String> list = new ArrayList<String>();
                int size = 0;

                if (obj != null) {
                    list = (ArrayList<String>) obj;
                    size = (Integer) session.getAttribute("size");
                }

                for (int i = 0 ; i < size ; i++) {
                    String value = list.get(i);

            %>
                    alert('<%= i %> = <%= value %> ');
            <%
                }

            %>                
        }
    </script>

它必须打印给定列表的元素…但是现在,它只是其中一个带有警报的大片段…用于重构它?我不喜欢在JSP中使用太多Java,因为servlet是应该放置它的位置

编辑:综上所述-我希望在此处使用“普通” JS循环…通常,我希望最小化Java代码并最大化JS


阅读 266

收藏
2020-06-08

共1个答案

小编典典

将其转换为JSONdoGet()预处理的servlet。您可以为此使用Google
Gson
。假设您拥有List<Person>

List<Person> persons = createItSomehow();
String personsJson = new Gson().toJson(persons);
request.setAttribute("personsJson", personsJson);
request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);

(请注意,我将其设为请求属性而不是会话属性,您可以随意更改它,但是我认为它不一定是会话属性,因为它不代表整个会话范围的数据)

将其分配给JSP中的JS变量,如下所示:

<script>
    var persons = ${personsJson};
    // ...
</script>

这样,它就可以作为完全有价值的JS对象使用。您可以直接将其提供给Google API。

现在,调用Servlet的URL而不是JSP。例如,当将其映射到URL模式时/persons,可通过http:// localhost:8080 /
contextname / persons
调用它。

2020-06-08