java - Spring-MVC:使用 'select-options' 时获取完整的对象而不是字符串

标签 java spring spring-mvc

我有类Lesson,它保存对Course对象的引用,如下所示:

public class Lesson {
    ...
    private Course course;
    ...
    public Course getCourse() {
        return course;
    }

    public void setCourse(Course course) {
       this.course = course;
    }
    ...
}

我想通过选择表单设置 Lesson 对象上的 Course 属性:

<form:form method="post" action="addLesson" modelAttribute="lesson">
 <form:select path="course">
  <form:options items="${courses}"/>
 </form:select>
 <input type="submit" name="addLesson" value="Add lesson">
</form:form>

在我的 Controller 中,我有以下内容:

@Controller
public class LessonController {
    @Autowired
    private LessonRepository lessonRepository;
    @Autowired
    private CourseRepository courseRepository;

    // form setup
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String showSchedule(ModelMap model) {
        ...
        model.addAttribute("lesson", new Lesson());
        model.addAttribute("courses", courseRepository.findAll());
        ...
    }

    @RequestMapping(value = "/addLesson", method = RequestMethod.POST)
    public String addLesson(@ModelAttribute("lesson") Lesson lesson, BindingResult result) {
        lessonRepository.save(lesson);
        return "redirect:/";
    }

    ...
}

问题在于它将 Course 对象的 String 表示形式(由 toString() 定义)传递给 course Lesson 对象的 setter。

如何使用我的选择表单正确设置 Lesson 对象的 Course 属性?

最佳答案

通常用于UI渲染Formatter<T>与 ConversionService 一起使用。但在 Spring 3 之前,PropertyEditors被使用了。

我已经为您的案例分享了示例 github 项目 https://github.com/jama707/SpringSelectBoxSample

@Component("courseFormatter")
public class CourseFormatter implements Formatter<Course> {
    private CourseRepository courseRepository=new CourseRepository();


    @Override
    public String print(Course course, Locale arg1) {
        return course.getName();
    }

    @Override
    public Course parse(String actorId, Locale arg1)  {
        return courseRepository.getCourse(actorId);
    }
}

关于java - Spring-MVC:使用 'select-options' 时获取完整的对象而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25731951/

相关文章:

java - java中的回文函数

Java - 线程陷入 "Park"状态

java - 当我们将自定义类对象作为键和值传递时,如何根据键名称从 HashMap 获取值

java - 在 Spring Boot 中将 .csv 文件上传到数据库

java - 在 HandlerInterceptor 获取 RequestBody 和 ResponseBody

java - 如何向对象类添加信息?

spring - 没有可用的 'org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext' 类型的合格 bean

java - 使用 CXF 发布非 Spring Web 服务

java - @MatrixVariable 与 @RequestParam 相比有哪些优势?

java - Spring MVC 5.0 在开发注释驱动的 Web 应用程序时使用哪个 HandlerMapping 作为默认 HandlerMapping?