Bean名称"categoryOptions"的BindingResult和普通目标对象都不能用作请求属性 [英] Neither BindingResult nor plain target object for bean name 'categoryOptions' available as request attribute

查看:82
本文介绍了Bean名称"categoryOptions"的BindingResult和普通目标对象都不能用作请求属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这个主题上有很多线程,我尝试了其中的大多数,但仍然无法解决我的问题.我正在使用SpringMVCMongoDB我要实现的目标是,我将一些数据存储在数据库中然后我将其从数据库检索回选择选项.这是我的密码.

Jsp页面.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="f"%>
    <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<!DOCTYPE html>
<html lang="en">
    <title>Master Referral</title>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width= device-width, initial-scale=1">
        <link type="text/css" rel="stylesheet" href='<spring:url value="/resources/css/bootstrap.min.css" />' >
        <link type="text/css" rel="stylesheet" href='<spring:url value="/resources/css/stylesvitalbeat.css" />' >


    </head>
    <body>
 <div class="container-fluid">
<div class="row">
                 <form action="http://localhost:8080/LoginMavenSpringMVC/admin/create" method="post">
                 <div class="col-md-2 col-sm-3">
                     <label class="control-label">Create Category:</label></div>
                     <div class="col-md-2 col-sm-4">
                   <input type="text" class="form-control input-sm field_color"  name="categoryName" placeholder="Name of the Category">
                         </div>
                     <div class="col-md-1 col-sm-3">
                <input type="submit" class="btn btn-primary btn-sm   height_margin"  name="create" value="Create">
                     </div>
                      </form>
<div>
<form class="form-horizontal" action="http://localhost:8080/LoginMavenSpringMVC/admin/saveReferral" method="post">
         <div class="row margin_div">
            <div class="col-sm-3 col-md-2">
                <label class="control-label">Select Category</label>
            </div>
             <div class="col-sm-5 col-md-4">
             <f:select path="categoryOptions">
            <f:options items="${list}"/>
         </f:select>
                              </div>

                </div>

</div>

控制器类

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.java.Dao.services.RegisterDao;
import com.java.Dao.services.RegisterDaoImplementaion;

@Controller
@RequestMapping("/admin")
public class ReferralController {

    @Autowired
    RegisterDao registerDao;

    @RequestMapping(value="/create", method=RequestMethod.POST)
    public ModelAndView create(@ModelAttribute("create") Category create){
        ModelAndView model =new ModelAndView("referralPage");
        System.out.println("Referral Controller.");     
    System.out.println( create.getCategoryName());
    if((StringUtils.hasText(create.getId()))) {
        registerDao.UpdateCategory(create);
    } else {
        registerDao.addCategory(create);
    }
    List<Category> list= registerDao.categoryList();
    model.addObject("list", list);
   return model;
    }

    @RequestMapping(value="/saveReferral", method=RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("saveReferral") Referrals referral){
        ModelAndView model=new ModelAndView("referralPage");        
        return model;
    }
}  

Dao服务

dao class...
package com.java.Dao.services;

import java.util.List;
import com.java.Package.Login.Category;


public interface RegisterDao {
public void addCategory(Category createCategory);
    public void UpdateCategory(Category createCategory);
    public List<Category> categoryList();
}  

Dao实施

import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;
import com.java.Package.Login.Category;
import com.mongodb.DBCollection;


@Repository
public class RegisterDaoImplementaion implements RegisterDao {

    @Autowired
    private MongoTemplate mongoTemplate;
    public static final String Collection_Category="CategoryList";
public void addCategory(Category createCategory) {
        // TODO Auto-generated method stub

        createCategory.setId(UUID.randomUUID().toString());
        System.out.println("Object in Repos::"+createCategory);
        mongoTemplate.insert(createCategory, Collection_Category);
    }
    public void UpdateCategory(Category createCategory) {
        // TODO Auto-generated method stub
        mongoTemplate.insert(createCategory, Collection_Category);      
    }
    @Override
    public List<Category> categoryList() {      
        return mongoTemplate.findAll(Category.class, Collection_Category);
    }
}

类别以映射categoryOptions

public class Referrals {
    private String categoryOptions;

    public String getCategoryOptions() {
        return categoryOptions;
    }

    public void setCategoryOptions(String categoryOptions) {
        this.categoryOptions = categoryOptions;
    }
}

并且我收到此错误日志

Servlet.service() for servlet [spring-dispatcher] in context with path [/LoginMavenSpringMVC] threw exception [An exception occurred processing JSP page /WEB-INF/views/referralPage.jsp at line 366

363:             </div>
364:              <div class="col-sm-5 col-md-4">
365:              
366:              <f:select path="categoryOptions">
367:                <f:options items="${list}"/>
368:              </f:select>
369:             <!--  <select class="form-control input-sm" name="categoryOptions" >


Stacktrace:] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'categoryOptions' available as request attribute

我在哪里弄错了?我尝试了其他问题的解决方案,但无法解决.

解决方案

您缺少将Referrals对象添加到模型中的功能.

    @RequestMapping(value="/saveReferral", method=RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("saveReferral") Referrals referral){
        ModelAndView model=new ModelAndView("referralPage");     
        model.addAttribute("categoryOptions",new Referrals());   //or referral
        return model;
    }

由于<f:select path="categoryOptions">导致发生异常,您在路径中提到了categoryOptions,但是在returning中却没有returning所在的位置,并且没有categoryOptions.

更新:因此,这表示每次加载referral jsp时都必须加载categoryOptions bean

在下面几行中,使用model.addObject()将列表添加到模型中,但是缺少路径变量categoryOptions.因此,在model.addObject("list", list);行之后,添加 model.addAttribute("categoryOptions", new Referrals());

<f:select path="categoryOptions">
   <f:options items="${list}"/>
</f:select>

I know there are many threads on this topic i have tried most of them, still cant fix my problem.I am using SpringMVC and MongoDB What i am trying to achieve is, I will Store some data in database and then i will retrieve it back from data base to a select options. here is my codes.

Jsp page..

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="f"%>
    <%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<!DOCTYPE html>
<html lang="en">
    <title>Master Referral</title>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width= device-width, initial-scale=1">
        <link type="text/css" rel="stylesheet" href='<spring:url value="/resources/css/bootstrap.min.css" />' >
        <link type="text/css" rel="stylesheet" href='<spring:url value="/resources/css/stylesvitalbeat.css" />' >


    </head>
    <body>
 <div class="container-fluid">
<div class="row">
                 <form action="http://localhost:8080/LoginMavenSpringMVC/admin/create" method="post">
                 <div class="col-md-2 col-sm-3">
                     <label class="control-label">Create Category:</label></div>
                     <div class="col-md-2 col-sm-4">
                   <input type="text" class="form-control input-sm field_color"  name="categoryName" placeholder="Name of the Category">
                         </div>
                     <div class="col-md-1 col-sm-3">
                <input type="submit" class="btn btn-primary btn-sm   height_margin"  name="create" value="Create">
                     </div>
                      </form>
<div>
<form class="form-horizontal" action="http://localhost:8080/LoginMavenSpringMVC/admin/saveReferral" method="post">
         <div class="row margin_div">
            <div class="col-sm-3 col-md-2">
                <label class="control-label">Select Category</label>
            </div>
             <div class="col-sm-5 col-md-4">
             <f:select path="categoryOptions">
            <f:options items="${list}"/>
         </f:select>
                              </div>

                </div>

</div>

controller class

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.java.Dao.services.RegisterDao;
import com.java.Dao.services.RegisterDaoImplementaion;

@Controller
@RequestMapping("/admin")
public class ReferralController {

    @Autowired
    RegisterDao registerDao;

    @RequestMapping(value="/create", method=RequestMethod.POST)
    public ModelAndView create(@ModelAttribute("create") Category create){
        ModelAndView model =new ModelAndView("referralPage");
        System.out.println("Referral Controller.");     
    System.out.println( create.getCategoryName());
    if((StringUtils.hasText(create.getId()))) {
        registerDao.UpdateCategory(create);
    } else {
        registerDao.addCategory(create);
    }
    List<Category> list= registerDao.categoryList();
    model.addObject("list", list);
   return model;
    }

    @RequestMapping(value="/saveReferral", method=RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("saveReferral") Referrals referral){
        ModelAndView model=new ModelAndView("referralPage");        
        return model;
    }
}  

Dao services

dao class...
package com.java.Dao.services;

import java.util.List;
import com.java.Package.Login.Category;


public interface RegisterDao {
public void addCategory(Category createCategory);
    public void UpdateCategory(Category createCategory);
    public List<Category> categoryList();
}  

Dao Implementation

import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Repository;
import com.java.Package.Login.Category;
import com.mongodb.DBCollection;


@Repository
public class RegisterDaoImplementaion implements RegisterDao {

    @Autowired
    private MongoTemplate mongoTemplate;
    public static final String Collection_Category="CategoryList";
public void addCategory(Category createCategory) {
        // TODO Auto-generated method stub

        createCategory.setId(UUID.randomUUID().toString());
        System.out.println("Object in Repos::"+createCategory);
        mongoTemplate.insert(createCategory, Collection_Category);
    }
    public void UpdateCategory(Category createCategory) {
        // TODO Auto-generated method stub
        mongoTemplate.insert(createCategory, Collection_Category);      
    }
    @Override
    public List<Category> categoryList() {      
        return mongoTemplate.findAll(Category.class, Collection_Category);
    }
}

Class to map categoryOptions

public class Referrals {
    private String categoryOptions;

    public String getCategoryOptions() {
        return categoryOptions;
    }

    public void setCategoryOptions(String categoryOptions) {
        this.categoryOptions = categoryOptions;
    }
}

and I am getting this error log

Servlet.service() for servlet [spring-dispatcher] in context with path [/LoginMavenSpringMVC] threw exception [An exception occurred processing JSP page /WEB-INF/views/referralPage.jsp at line 366

363:             </div>
364:              <div class="col-sm-5 col-md-4">
365:              
366:              <f:select path="categoryOptions">
367:                <f:options items="${list}"/>
368:              </f:select>
369:             <!--  <select class="form-control input-sm" name="categoryOptions" >


Stacktrace:] with root cause
java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'categoryOptions' available as request attribute

Where I am getting wrong? I have tried solutions from different question but couldn't solve it.

解决方案

You are missing adding Referrals object to model.

    @RequestMapping(value="/saveReferral", method=RequestMethod.POST)
    public ModelAndView save(@ModelAttribute("saveReferral") Referrals referral){
        ModelAndView model=new ModelAndView("referralPage");     
        model.addAttribute("categoryOptions",new Referrals());   //or referral
        return model;
    }

Exception is occuring because of <f:select path="categoryOptions">,you have mentioned categoryOptions in path but no where you are returning to this jsp with categoryOptions.

Update : So this says whenever you are loading referral jsp, you have to load with categoryOptions bean

And in below lines list is added to model using model.addObject() but path variable categoryOptions is missing. So after the line model.addObject("list", list); add model.addAttribute("categoryOptions", new Referrals());

<f:select path="categoryOptions">
   <f:options items="${list}"/>
</f:select>

这篇关于Bean名称"categoryOptions"的BindingResult和普通目标对象都不能用作请求属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆