java - Spring MVC 生成 "Neither BindingResult nor plain target object exception for bean name ' 命令'可用作请求属性”

标签 java spring-mvc

出于某种原因,即使在查看了此处的多个示例之后,我似乎也无法解决此问题。

我的 Controller 产生此错误:“bean 名称“命令”的 BindingResult 和普通目标对象都不能作为请求属性使用”。

这是我的 Controller :

package net.codejava.Spring;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

@Controller
@SessionAttributes
public class MainController {

    @RequestMapping(value="/", method = RequestMethod.GET)
    public ModelAndView visitHome() {

        return new ModelAndView("param","command",new params());
        //return new ModelAndView("index");
    }

    @RequestMapping(value="/HelloWorld/main", method = RequestMethod.GET)
    public ModelAndView visitAdmin() {
        JasperToPDF.generate();
        ModelAndView model = new ModelAndView("main");
        model.addObject("title", "Main Page");
        model.addObject("message", "You are on the main page.");

        return model;
    }

    @RequestMapping(value="/HelloWorld/summary", method = RequestMethod.GET)
    public ModelAndView visitSummary() {

                 return new ModelAndView("param","command",new params());
    }

    @RequestMapping(value="/HelloWorld/Detailed", method = RequestMethod.GET)
    public ModelAndView visitSummary() {
        return new ModelAndView("Detailed");
    }

    @RequestMapping(value="/HelloWorld/generated", method = RequestMethod.POST)
    public String generateSummary(@ModelAttribute("command")params param, ModelMap model)
    {
                System.out.println(param.getSD());
                return ("generated");
    }
}

这是我的摘要.jsp:

 <%@ page language="java" session="true" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@include file='template.jsp'%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<title>Summary</title>
</head>
<body>
<form:form action="/HelloWorld/generated.jsp" method="post" commandName="command">
<form:select class="form-control" path="dept" commandName="command">
    <option selected="selected" value="0">Select Department</option>
    <option value="1">All</option>
    <option value="2">HR</option>
    <option value="3">IT</option>
    <option value="4">Security</option>
</form:select>
</br></br></br></br>

<div class="form-group">
  <form:label for="usr" path="sd">Starting date(dd-mm-yyyy):</form:label>
  <form:input type="text" path="sd" class="form-control" id="usr"/>
</div>

<div class="form-group">
  <form:label for="usr" path="sd">Ending date(dd-mm-yyyy):</form:label>
  <form:input type="text" path="ed" class="form-control" id="usr"/>
</div>

<button type="submit" class="btn btn-primary">Generate Report</button>
</form:form>
</body>
</html>

这是 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">
  <display-name>Spring Security Basic XML</display-name>

    <servlet>
        <servlet-name>SpringController</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>SpringController</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/spring-security.xml
        </param-value>
    </context-param> 

    <!-- Spring Security  Filter -->
    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>springSecurityFilterChain</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

最佳答案

您的summary.jsp包含command作为formcommandName。因此在访问它之前您必须调用一个请求,它为您提供一个名为 command 的 bean 对象。

在您的代码中,如果 HelloWorld/summary 是访问 summary.jsp 的请求,那么在 ModelAndView 中您必须提及 名称视为摘要而不是命令

return new ModelAndView("summary","command",new Params());

Summary.jsp

<form:form action="/HelloWorld/generated.jsp" method="post" commandName="command">
 <form:select class="form-control" path="dept">
    <option selected="selected" value="0">Select Department</option>
    <option value="1">All</option>
    <option value="2">HR</option>
    <option value="3">IT</option>
    <option value="4">Security</option>
</form:select>
</br></br></br></br>

<div class="form-group">
  <form:label for="usr" path="sd">Starting date(dd-mm-yyyy):</form:label>
  <form:input type="text" path="sd" class="form-control" id="usr"/>
</div>

<div class="form-group">
  <form:label for="usr" path="sd">Ending date(dd-mm-yyyy):</form:label>
  <form:input type="text" path="ed" class="form-control" id="usr"/>
</div>

<button type="submit" class="btn btn-primary">Generate Report</button>

Controller

    @RequestMapping(value="/HelloWorld/Summary", method = RequestMethod.GET)
    public ModelAndView visitSummary() {
        return new ModelAndView("Summary","command",new Params());
    }

Params.java

private String sd;
private String dept;
private String ed;
//getter setter

和 URL:localhost:****/Helloworld/Summary

更新

因此您在 URL 中看不到 *.jsp,这是因为您在 servlet 映射中仅映射了 /

 <url-pattern>/</url-pattern>

这表示 DispatcherServlet 仅针对 /requests 出现,如果请求中包含路径信息,那么它将不会到达您的 >请求映射

因此,要么将模式更改为 /**/*.jsp,要么更改访问方式。

关于java - Spring MVC 生成 "Neither BindingResult nor plain target object exception for bean name ' 命令'可用作请求属性”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39119995/

相关文章:

java - Spring URL映射问题

java - 有没有一种简单的方法可以使用 java Graphics 2D 对象淡入字符串字符?

java - HTTP 客户端-服务器,我不认为我正在使用 BasicResponseHandler() 关闭客户端连接

java - Spring mvc maven - 添加库

java - javax.servlet-api 和 commons-dbcp 在我们的 Spring 应用程序中重要吗?

没有 Spring Boot 和 @EnableAutoConfiguration 的 Spring Boot 2 Actuator

java - 我们如何将 json 发送到 Controller 并基于 java 中的键进行迭代?

java - 查找迭代器中内容之间的持续时间(以月为单位)

java - 有Java编码标准吗?如果是这样,是否有工具可以检查这些标准?

java - mybatis查询参数为0,数据异常。为什么?