【问题标题】:Spring MVC: Neither BindingResult nor plain target object for bean name 'marks' available as request attribute. Tried all solutionsSpring MVC:Bean 名称“标记”的 BindingResult 和普通目标对象都不能用作请求属性。尝试了所有解决方案
【发布时间】:2020-12-02 09:27:25
【问题描述】:

我尝试了所有解决方案,但我不断收到此错误。此外,如果我不在 jsp 文件中使用 form:form 并使用简单的 HTML,我会得到所需的输出。

控制器类

@Controller
public class controller_class {

    /*
     * @RequestMapping(path = "/index", method = RequestMethod.GET) public
     * ModelAndView mar() { return new ModelAndView("index","command",new marks());
     * }
     */
    @RequestMapping("/index")
    public ModelAndView showComments() {
        return new ModelAndView("marks","command",new marks());
    }

    @RequestMapping(value = "/addMarks", method = RequestMethod.POST)
    public ModelAndView stud(@ModelAttribute("marks") marks m) {
        ModelAndView mv = new ModelAndView("result");
        int k = m.calculate();
        mv.addObject("tot_marks", k);
        return mv;
    }
}

index.jsp

<form:form method = "POST" modelAttribute="marks" action = "/springmvc_qa3/addMarks">
         <table>
            <tr>
               <td><form:label path = "sci_marks">Name</form:label></td>
               <td><form:input path = "sci_marks" /></td>
            </tr>
            <tr>
               <td><form:label path = "maths_marks">Age</form:label></td>
               <td><form:input path = "maths_marks" /></td>
            </tr>
            <tr>
               <td><form:label path = "eng_marks">id</form:label></td>
               <td><form:input path = "eng_marks" /></td>
            </tr>
            <tr>
               <td colspan = "2">
                  <input type = "submit" value = "Submit"/>
               </td>
            </tr>
         </table>  
      </form:form>
   </body>

如果我改用它,则输出正确

<form method="POST" action="/springmvc_qa3/addMarks"  >
         <table>
            <tr>
               <td><label >Science Marks</label></td>
               <td><input type="text" name="sci_marks" /></td>
            </tr>
            <tr>
               <td><label >Mathematics Marks</label></td>
               <td><input type="text" name="maths_marks" /></td>
            </tr>
            <tr>
               <td><label >English Marks</label></td>
               <td><input type="text" name="eng_marks" /></td>
            </tr>
            <tr>
               <td colspan="2">
                  <input type="submit" value="Submit" />
               </td>
            </tr>
         </table>  
      </form>

使用第一种方法无法得到正确输出的原因是什么?

【问题讨论】:

  • 在您的索引控制器中,您正在以“命令”的名称传递对象“新标记()”。但是在表单中,您使用的是带有名称标记的对象。顺便说一句,请使用公共类 Marks {} 中的首字母大写命名您的类,然后使用 Marks m 声明变量。
  • 那么我应该在代码中加入哪些更改?是的,你是对的。我会注意用首字母大写来命名类。

标签: spring eclipse spring-mvc


【解决方案1】:

将以下内容添加到您的控制器类中:

@ModelAttribute("marks")
public Marks nameOfMethodDoesntMatter(){
    return new Marks();
}

确保您的 Marks 类具有 getter、setter 和默认构造函数。

考虑调用您的类 MarksDTO 或类似的名称以更好地传达其含义(DTO = 数据传输对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    相关资源
    最近更新 更多