【问题标题】:Spring JSP - One view returning 404Spring JSP - 一个视图返回 404
【发布时间】:2012-11-22 10:47:57
【问题描述】:

我有一个带有 RequestMapping 方法的控制器类。此方法未呈现。我在控制台中看不到任何错误。我确信我的请求正在使用一些打印语句正确映射。但是视图没有呈现,日志中也没有错误。我只是在浏览器中得到一个 HTTP 404。不确定其他视图正确呈现时出了什么问题。我已阅读以下问题SpringMVC giving 404 returning a view 但没有帮助。

这里是请求映射方法。不知道出了什么问题或如何调试它?我所有的 jsp 文件都在一个目录中。我的控制器中还有一个公共默认构造函数。但是我的控制器可能还有其他问题,我还没有看到。如果您需要更多详细信息,这里是更详细代码的链接。 https://github.com/C4G/V2V/blob/cbc4a8d9e904ab1f5bf47b9550a0879ccff33b01/src/controller/TestResultsController.java

  @RequestMapping(value = "/editTestResultFormGenerator", method = RequestMethod.GET)
  public ModelAndView editTestResultFormGenerator(HttpServletRequest request,
      Model model,
      @RequestParam(value="collectionNumber", required=false) Long collectionNumber,
      @RequestParam(value="collectionId", required=false) Long collectionId) {

    TestResultBackingForm form = new TestResultBackingForm();

    ModelAndView mv = new ModelAndView("editTestResultForm");
    Map<String, Object> m = model.asMap();
    m.put("refreshUrl", getUrl(request));
    m.put("existingTestResult", false);
    if (collectionId != null) {
      form.setId(collectionId);
      TestResult testResult = testResultRepository.findTestResultByCollectionId(collectionId);
      if (testResult != null) {
        form = new TestResultBackingForm(testResult);
        m.put("existingTestResult", true);
      }
      else {
        form = new TestResultBackingForm();
      }
    }

    addEditSelectorOptions(m);
    m.put("editTestResultForm", form);
    m.put("refreshUrl", getUrl(request));
    // to ensure custom field names are displayed in the form
    m.put("testResultFields", utilController.getFormFieldsForForm("TestResult"));
    System.out.println(m);
    mv.addObject("model", m);
    return mv;
  }

【问题讨论】:

    标签: spring model-view-controller jsp controller


    【解决方案1】:

    发现问题。使用 Eclipse 自动完成,我选择了错误的 ModelAndView 类。

    我应该选择的。

    import org.springframework.web.servlet.ModelAndView;
    

    我选择了

    import org.springframework.web.portlet.ModelAndView;
    

    这就解释了。

    【讨论】:

      【解决方案2】:

      您需要在请求处理程序方法的末尾添加return mv;

      ^(显然错了。不够清醒,嘿。)

      讨论后编辑:特定控制器的某些地方不太对劲,但与方法的代码无关。查看 git 存储库中的代码后,我看不到任何明显的东西,因此建议进行大量日志记录/调试以准确找出问题所在。或者干脆不使用那个控制器。 :)

      【讨论】:

      • 复制代码有误。对不起。更新了问题。我要返回 mv。否则会出现编译错误。
      • 该死的,希望有一个简单的。 :) 虽然现在考虑它,但如果你不返回它就不会编译,所以我应该知道这只是一个复制/粘贴错误。让我们看看...
      • 问题是与其他控制器一起工作的模式相同,但不是这个。在我开始重构之前几天前它曾经工作过,但这是一个基本视图。项目结构非常简单。所以不知道为什么它不能单独使用这个控制器。
      • 无论测试结果如何,当您要重新实例化该变量时,您为什么要使用 form.setId(collectionId);
      • 如果 jsp 有问题,我至少应该看到堆栈跟踪以及 Http 500 错误。但我收到 404 错误。
      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 2017-05-08
      • 2022-10-17
      • 2019-10-22
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      相关资源
      最近更新 更多