是什么导致“java.lang.IllegalStateException:

是什么导致“java.lang.IllegalStateException:BindingResult或bean名称的普通目标对象‘命令’作为请求属性可用”?

这意味着这是一个广泛的典型的问答文章,为这些类型的问题。


我试图编写一个SpringMVC Web应用程序,用户可以在这个应用程序中将电影名称添加到内存中的集合中。它的配置如下

public class Application extends AbstractAnnotationConfigDispatcherServletInitializer {
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] {};
    }
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?>[] { SpringServletConfig.class };
    }
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }}

@Configuration@ComponentScan("com.example")public class SpringServletConfig extends WebMvcConfigurationSupport {
    @Bean
    public InternalResourceViewResolver resolver() {
        InternalResourceViewResolver vr = new InternalResourceViewResolver();
        vr.setPrefix("WEB-INF/jsps/");
        vr.setSuffix(".jsp");
        return vr;
    }}

有一个@Controller类中的com.example包装

@Controllerpublic class MovieController {
    private final CopyOnWriteArrayList<Movie> movies = new CopyOnWriteArrayList<>();
    @RequestMapping(path = "/movies", method = RequestMethod.GET)
    public String homePage(Model model) {
        model.addAttribute("movies", movies);
        return "index";
    }
    @RequestMapping(path = "/movies", method = RequestMethod.POST)
    public String upload(@ModelAttribute("movie") Movie movie, BindingResult errors) {
        if (!errors.hasErrors()) {
            movies.add(movie);
        }
        return "redirect:/movies";
    }
    public static class Movie {
        private String filmName;
        public String getFilmName() {
            return filmName;
        }
        public void setFilmName(String filmName) {
            this.filmName = filmName;
        }
    }}


应用程序配置了上下文路径。/Example..当我发送GET请求时

http://localhost:8080/Example/movies

我期望JSP生成一个HTML<form>只有一个文本输入,用于Movie名称和提交按钮,我可以使用它发送带有新的POST请求。Movie..为什么JSP servlet不能呈现Spring的<form:form>标签?



翻翻过去那场雪
浏览 3666回答 3
3回答

繁花不似锦

为了使表单标记变得简单,只需添加一个“CommandName”,这对于它实际上要查找的内容来说是一个可怕的名称…它需要您在MdelAttribute注释中命名的对象。因此,在本例中,命令名=“电影”。这样你就不用读冗长的解释了,朋友。

ibeautiful

在我的例子中,它通过添加modelAttribute="movie"到Form标记,并将模型名称放在属性的前面,如下所示<form:input path="filmName" type="text" id="movie.name" />
打开App,查看更多内容
随时随地看视频慕课网APP