带有选择(下拉)的表单不显示错误代码

时间:2019-09-30 19:57:15

标签: spring spring-boot spring-mvc thymeleaf

我有一个表格,其中包含一个选择,用于按ID列出系统中的所有教师,但无法正常工作。

这是表格的代码部分

和相应的路径控制器请求

我正在使用Thymeleaf和Spring Boot,因此'pr'对应于教师资料库的变量名称。

<form th:action="@{/professor/updateProfessor/}"  method="post" th:object="${professor}">
        <div class= "form-group">
        <label th:for = "id">Id</label>
        <select th:field="*{id}">
            <option
            th:value = "${id}"
            th:text = "${professor.id}">
            </option>
            </select>
        </div>      
        <input type = "submit" value = "Add Professor">Save</button>
    </form>


@GetMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView professorSelecao(){
    ModelAndView atualizaProfessor = new ModelAndView("/atualizaProfessor");
    atualizaProfessor.addObject("Add Professor");
    return atualizaProfessor;
}

@PostMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView selecaoProfessor(){
    ModelAndView pagSucesso = new ModelAndView("/pagSucesso");

    pagSucesso.addObject(pr.findAll());
    return pagSucesso;
}

2 个答案:

答案 0 :(得分:0)

在您的控制器上,按照以下说明发送教授列表。在这里,您将教授名单与“ professorList”相关联:

model.addAttribute("professorList", pr.findAll());

然后访问您的百里香叶中“ professorList”上方的内容(类似于):

<option th:each="professor: ${professorList}" th:value="${professor}"> </option>

不是完整的代码,但我希望您有个入门的想法。

举一个完整的例子,看看herehere

答案 1 :(得分:0)

首先什么不起作用?因为我看到很多可能无法正常工作的东西,也许是因为我没有看到全部代码,或者我猜到了一些东西,让我们看看

使用进入控制器时

 localhost:8080/professor/selecionaProfessor

您希望使用正确的表格吗? (下一个代码)

<form th:action="@{/professor/updateProfessor/}"  method="post" th:object="${professor}">
    <div class= "form-group">
    <label th:for = "id">Id</label>
    <select th:field="*{id}">
        <option
        th:value = "${id}"
        th:text = "${professor.id}">
        </option>
        </select>
    </div>      
    <input type = "submit" value = "Add Professor">Save</button>
</form>

因为这是正确的,您的方法有问题:

@GetMapping(value = {"/selecionaProfessor"})
@ResponseBody
public ModelAndView professorSelecao(){
   ModelAndView atualizaProfessor = new ModelAndView("/atualizaProfessor");
   atualizaProfessor.addObject("Add Professor");
return atualizaProfessor;
}

您会收到一条错误消息:

Neither BindingResult nor plain target object for bean name 'professor' available as request attribute

因此您缺少添加Key Professor和List的功能,因此需要进行以下更改:

   atualizaProfessor.addObject("Add Professor");

类似:

atualizaProfessor.addObject("professor",   someListOfProfessorHereFromTheService (List<Professor>));

,并且如果您的profesor对象具有您在表单上拥有的属性,那么它应该可以正常工作。

现在让我们假设它以前已经起作用,而错误不是那样。

当您输入表单时,如果看到以下内容:

 form th:action="@{/professor/updateProfessor/}" 

您正在使用updateProfessor,但在您的控制器上看不到

  @PostMapping(value = {"/selecionaProfessor"})

所以我认为您应该更改html页面或控制器内的url映射,并与错误1相同,使用键和值映射对象,并将列表迭代到html中,如我在第一个错误中所示

希望有帮助