如何用胸腺迭代并保存2个物体?

发布于 2025-01-31 10:19:12 字数 3278 浏览 3 评论 0原文

我不知道解决此错误是如何解决的,我看到了一些有关此错误的文章,但没有任何作用。

错误

解决[org.springframework.validation.bindexception:org.springframework.validation.validation.validation.beanproperpertybindingresult:1 object'pupil'field'curse'curse'curse'curse'curse'curse'curse'curse'curse'curse'curse'curse':deprodcurse'瞳孔= [],tocutlist = [])]; [无法将'java.lang.string'类型的属性值转换为必需的类型'com.example.administrator.administrator.model.model.model.modelcurse'用于属性'curse';

HTML

<form th:action="@{/pupilController/add}"  th:object="${pupil}" method="post">
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label>Name</label>
                    <input type="text" class="form-control" th:field="*{name}" placeholder="Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Last Name</label>
                    <input type="text" class="form-control" th:field="*{lastName}" placeholder="Last Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Age</label>
                    <input type="number" class="form-control" th:field="*{age}" placeholder="Age">
                </div>
                <div class="form-group col-md-6">
                    <label>Phone Number</label>
                    <input type="text" class="form-control" th:field="*{phoneNumber}" placeholder="Phone Number">
                </div>
                <div class="form-group col-md-6">
                    <select th:field="*{curse}" class="form-control">
                        <option th:each="curso : ${curses}"
                                th:value="${curso}"
                                th:text="${curso.name}"></option>
                    </select>
                </div>
            </div>
    
            <input type="submit" name="btnInsert" class="btn btn-primary"  value=Añadir>
    
        </form>

控制器

 @GetMapping("/addPupil")
    public ModelAndView login(Model model){
        ModelAndView mav = new ModelAndView("addpupil");
        List<ModelCurse> modelCurses = curseService.getAllCurses();
        mav.addObject("pupil",new ModelPupil());
        mav.addObject("curses",modelCurses);
        return mav;
    }



 @PostMapping("/add")
    public RedirectView addPupil(@ModelAttribute("pupil")ModelPupil modelPupil){
        pupilService.addPupil(modelPupil);
        return new RedirectView("/pupilController/pupilList");
    }

DTO

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelCurse {

    private long id;
    private String name;
    private String division;
    private List<ModelPupil> pupilList;
    private List<ModelTeacher> teacherList;

}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelPupil {

    private long id;
    private String name;
    private String lastName;
    private int age;
    private int phoneNumber;
    private ModelCurse curse;

}

I dont know how fix this error, i saw some articles about that but nothing works.

Error

Resolved [org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errorsField error in object 'pupil' on field 'curse': rejected value [ModelCurse(id=2, name=PHP, division=2da, pupilList=[], teacherList=[])];
[Failed to convert property value of type 'java.lang.String' to required type 'com.example.administrator.administrator.model.ModelCurse' for property 'curse';

HTML

<form th:action="@{/pupilController/add}"  th:object="${pupil}" method="post">
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label>Name</label>
                    <input type="text" class="form-control" th:field="*{name}" placeholder="Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Last Name</label>
                    <input type="text" class="form-control" th:field="*{lastName}" placeholder="Last Name">
                </div>
                <div class="form-group col-md-6">
                    <label>Age</label>
                    <input type="number" class="form-control" th:field="*{age}" placeholder="Age">
                </div>
                <div class="form-group col-md-6">
                    <label>Phone Number</label>
                    <input type="text" class="form-control" th:field="*{phoneNumber}" placeholder="Phone Number">
                </div>
                <div class="form-group col-md-6">
                    <select th:field="*{curse}" class="form-control">
                        <option th:each="curso : ${curses}"
                                th:value="${curso}"
                                th:text="${curso.name}"></option>
                    </select>
                </div>
            </div>
    
            <input type="submit" name="btnInsert" class="btn btn-primary"  value=Añadir>
    
        </form>

Controller

 @GetMapping("/addPupil")
    public ModelAndView login(Model model){
        ModelAndView mav = new ModelAndView("addpupil");
        List<ModelCurse> modelCurses = curseService.getAllCurses();
        mav.addObject("pupil",new ModelPupil());
        mav.addObject("curses",modelCurses);
        return mav;
    }



 @PostMapping("/add")
    public RedirectView addPupil(@ModelAttribute("pupil")ModelPupil modelPupil){
        pupilService.addPupil(modelPupil);
        return new RedirectView("/pupilController/pupilList");
    }

DTO

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelCurse {

    private long id;
    private String name;
    private String division;
    private List<ModelPupil> pupilList;
    private List<ModelTeacher> teacherList;

}

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ModelPupil {

    private long id;
    private String name;
    private String lastName;
    private int age;
    private int phoneNumber;
    private ModelCurse curse;

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木槿暧夏七纪年 2025-02-07 10:19:12

当我们提交表单时,所选选项的值将以HTTP Post中的文本或字符串发送。因此,如果您期望Spring会自动将Curse的字符串值转换为类型modelscurse的对象,那么您的假设是错误的。
,但Spring确实为我们提供了一种使用Java Beans PropertyEditorSupport进行操作的方法。在这里,您可以扩展此类,并提供有关如何将该字符串转换为所需对象的实现。

When we submit the form, the value of selected option is sent as Text or String in HTTP POST. So, if you are expecting that Spring would automatically convert that String value of curse to object of type ModelCurse, then your assumption is wrong.
But Spring does provide us a way to do it using Java beans PropertyEditorSupport. Here you can extend this class, and provide your own implementation on how to convert that String to the required object.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文