我不知道如何进行简单的 1 字段验证,其中我根据服务检查值(或任何其他逻辑检查)。
我看到的大多数表单验证都使用一个类来保存表单数据,使用 javax.validation 并使用 @NotNull、@Min(10) 等属性进行标记。然后检查 BindingResult.hasErrors()。像这里: https://spring.io/guides/gs/validating-form-input/
我正在尝试对单个字段执行此操作,并且我想根据服务将返回给我的内容而不是这些验证属性之一进行验证。
我应该在控制器的 POST 处理程序中放置什么才能实现此操作?
这是我在控制器中用于管理表单结果的功能
@RequestMapping(value = "/myController", method=RequestMethod.POST)
public String checkFieldVal(@RequestParam String valFromForm){
if(!myService.isThisValueGood(valFromForm)) {
//Show the user their value is bad
}
//return to some other page
}
这是在我的 JSP 中(像这样简单):
<form id="form" method="POST">
<label for="valueToCheck">What's your value:</label>
<input type="text" id="valueToCheck" name="valueToCheck"></input>
<input type="submit" value="Submit">
</form >
尝试替换它:
<form id="form" method="POST">
添加如下action
:
<form action="myController" id="form" method="POST">
并替换它:
@RequestMapping(value = "/myController", method=RequestMethod.POST)
public String checkFieldVal(@RequestParam String valFromForm){
添加正确的名称:
@RequestMapping(value = "/myController", method=RequestMethod.POST)
public String checkFieldVal(@RequestParam("valueToCheck") String valueToCheck){
参数名称必须在控制器和 html 中匹配。
@RequestParam String valFromForm
<input ... name="valueToCheck">
选项 1:保持 jsp 不变,将控制器代码更改为
@RequestParam String valueToCheck
或者,您可以将限定符添加到参数名称中,如下所示:
@RequestParam("valueToCheck") String valFromForm
选项 2:保持控制器原样,将 jsp 更改为,
<input ... name="valFromForm">