gpt4 book ai didi

Spring Controller ,为什么返回的 View 被忽略了?

转载 作者:行者123 更新时间:2023-12-01 14:46:12 26 4
gpt4 key购买 nike

假设我有一个现有的工作页面 Display Cashier,它显示有关商店收银员的信息。现在,我向该页面添加一个按钮,如下所示:

<a href="handleGetManager.ctl?cashierId=${id}" class="btn btn-mini">Manager</a>

此 URL 的请求映射(成功)将其映射到 Controller :HandleGetManager

HandleGetManager Controller 如下所示:

@Controller
public class HandleGetManager{

private employeeBO employeeBO; //BO handles all business logic

//spring hooks
public HandleGetManager(){}
public void setemployeeBo(employeeBO employeeBO){
this.employeeBO = employeeBO;
}

//get controller
@RequestMapping(method=RequestMethod.GET)
public String getManager(@RequestParam String cashierId){

Long managerId = employeeBO.getManagerByCashierId(cashierId);

String redirectUrl = "/displayManager.ctl?managerId=" + managerId.toString();
return redirectUrl;
}

}

这是我尝试时发生的情况:

我在 Display Cashier 页面上点击了新按钮,我预计会发生以下情况:

  • 浏览器向指定的URL发送get请求

  • spring 请求映射确保控制流传递给此类。

  • @RequestMapping(method=RequestMethod.GET) 片段确保调用此方法

  • @RequestParam String cashierId 指示 Spring 解析 URL 并将 cashierId 值作为参数传递到此方法中。

  • EmployeeBo 已通过 spring 注入(inject)到 Controller 中。

  • 业务逻辑发生,调用 BO 并且 managerId var 填充了正确的值。

  • 该方法返回不同 View 的名称,并附加一个新的 managerId URL arg

现在,到目前为止,一切都按计划进行。我期望接下来发生的是:

  • 浏览器被定向到该 URL

  • 然后它将向那个 url 发送一个获取请求,

  • 整个过程将在另一个 Controller 中重新开始,使用不同的 URL 和不同的 URL arg。

相反发生的是:

  • 此 Controller 返回不同 View 的名称

  • 浏览器被重定向到一个一半正确一半错误的 URL:handleGetManager.ctl?managerId=12345

  • URL 参数改变了,但 Controller 的名称没有改变,尽管我明确地返回了它

  • 我收到一个错误

我做错了什么?我错过了什么吗?

最佳答案

假设您的 MVC 配置中有一个 UrlBasedViewResolver,您返回的 String 值是一个 View nameViewResolver 将采用该名称并尝试为其解析 View

您似乎想要做的是获得带有重定向的 301 响应。对于 View 名称,您可以通过在 View 名称中指定 redirect: 前缀来实现。文档中对其进行了描述,here .

这里有一个问题/答案,解释了您可以执行重定向的所有(默认)方式:

关于Spring Controller ,为什么返回的 View 被忽略了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24511826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com