如何在 Spring Boot 的所有 JSP 页面中显示相同的城市名称?

Posted

技术标签:

【中文标题】如何在 Spring Boot 的所有 JSP 页面中显示相同的城市名称?【英文标题】:How to display same city name in all JSP pages in Spring Boot? 【发布时间】:2021-09-20 07:53:12 【问题描述】:

我正在使用 Spring Boot 开发电子商务 Web 应用程序。我有需要在所有 JSP 页面中显示的城市名称。例如,如果我选择城市名称为孟买,那么无论有多少 JSP 页面(不包括结帐页面)都应该显示相同的城市名称(即孟买应该显示在结帐页面之外的所有页面中)。所以,我试图通过使用查询参数来完成这件事。但无法在其他页面显示相同的城市名称(如果我点击其他链接重定向到另一个页面)。

从下面的脚本中,我从 index.jsp 的查询参数中获取城市名称并将其显示在 webheader.jsp 中。

    function getcities()
                var city = document.getElementById('cityname').value;
                var url = "api/getcities";
                $.post(url, 
                    city : city,
                , function(data, status) 
                    if (data.status == "OK") 
                        if (data.statusCode == 1) 
                            var citylist = data.response;
                            var citylistlen = citylist.length;
                            var city = ""; 
                            if(citylistlen > 0)
                                for(var i = 0; i < citylistlen; i++)
                                    var pincode = citylist[i].pincode;
                                    var cityname = citylist[i].delivercityid.city;
                                    if(null != pincode && null != cityname)
                                        city = city + "<div style='border: 1px solid; padding: 5px; display: block; z-index: 100;  position: inherit; font-style: oblique; color: blueviolet;' onclick=\"getcitydata('"+citylist[i].delivercityid.delivercityid+"','"+cityname+"')\">"
                                        +"<div><div style='padding: 5px;'><a href=\"..<%=WebUrl.index%>?city="+cityname+"\"><strong style=\"color: indigo;\">"+cityname+"</strong>&nbsp;("+pincode+")</a></div></div></div>";
                                    
                                
                            
                            document.getElementById('showcity').innerhtml = city;
                         else 
                            var error = data.responseMessage;
                            swal(error, "", "error");
                        
                     else 
                        var error = data.responseMessage;
                        swal(error, "", "error");
                    
                );
             

webheader.jsp 内部:

    <div class="city-popup">
            <div id="user-selected-city-input">
                <h6>Delivery In</h6>
                    <%
                        String cityname = request.getParameter("city"); 
                        if(cityname == null)
                         out.print("<h6 style=\"color: #330000;\">Choose City</h6>");
                        else
                         out.print("<h5 style=\"color: #330000;\">"+cityname+"</h5>");
                        
                    %>
            </div>
        </div>

应该怎么做?我需要使用 cookie 或其他方式吗?

【问题讨论】:

【参考方案1】:

你可以使用session.setAttribute("city",cname)然后你可以通过session.getAttribute()访问

【讨论】:

这个方法我也试过了,但是没用。 你设置在 在设置会话之前你能检查值是否为空。 我试过 String city = request.getParameter("city"); session.setAttribute("cityname", city);在 webheader.jsp 和 product.jsp 中的 getAttribute 作为 String city = (String)session.getAttribute("cityname"); System.out.println("之前 JSP 中的城市名称:"+city.toString());所以它打印了城市名称。但无法在该 div 中显示该名称。 基本上,webheader 页面对于所有其他 JSP 页面都是通用的。我曾经包含使用 【参考方案2】:

也许您正在寻找拦截器。拦截器可以拦截任何请求,您可以轻松地在请求中注入一些内容或修改请求以满足您的需要。

在您的情况下,您可以过滤拦截器中的请求,并且仅当请求 URL 不包含结帐页面链接时,通过 HandlerInterceptorpostHandle 方法将城市作为 JSP 对象传递。

查看此page 了解有关HandlerInerceptor 的更多信息。

【讨论】:

我不确定 HandlerInterceptor 的事。首先,需要了解这个东西才能够实现。谢谢。

以上是关于如何在 Spring Boot 的所有 JSP 页面中显示相同的城市名称?的主要内容,如果未能解决你的问题,请参考以下文章

spring boot学习02如何在spring boot项目中访问jsp

Spring Boot Web 应用程序:JSP 页面抛出 404 错误

如何在 Spring Boot 中与 Spring MVC 一起提供遗留的 jsp 页面?

如何使用 Thymeleaf 或 JSP 在 Spring Boot 中启用目录列表

Jsp 视图页面在 Spring Boot 中不呈现。如何解决?

spring boot怎么创建jsp页面