验证Thymeleaf中的输入

时间:2018-11-18 22:53:48

标签: java html spring spring-boot thymeleaf

我有这个输入:

Masa: <input type="number"  class="form-control form-text"   name="masa"/>
    <div class="text col-sm-12 error" th:if="${wzrost}" >
        <p class="text text-center">
            To pole jest wymagane
        </p>
    </div>
    Wzrost: <input type="number" class="form-control form-text "   name="wzrost"/>
    <div class="text col-sm-12 error" th:if="${wzrost}" >
        <p class="text text-center">
            To pole jest wymagane
        </p>
    </div>

还有这个控制器;

String x = String.valueOf(masa);
        String y = String.valueOf(wzrost);


        if(x==null ){
        model.addAttribute("wzrost",true);
        return"views/success";
    }
        if(y==null ){
            model.addAttribute("wzrost",true);
            return"views/success";
        }

当我单击表单提交按钮时,总是出现错误nullpointerexception。

如何验证输入,以便在输入为空时弹出消息

2 个答案:

答案 0 :(得分:0)

似乎您想实现服务器端验证。为此,最好的方法是使用验证器及其bindingResult。实施服务器端验证的步骤是

  1. 需要模型

    public class PersonForm {
      private String name;
    
     public String getName() {
        return this.name;
    }
    
     public void setName(String name) {
        this.name = name;
    }
    }
    
  2. 在html中使用表单模型

    <form action="#" th:action="@{/personForm}" th:object="${personForm}" method="post">
    <table>
        <tr>
            <td><label th:text="#{label.name}+' :'"></label></td>
            <td><input type="text" th:field="*{name}" /></td>
            <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Generic Error</td>
        </tr>
        <tr>
            <td><button type="submit">Submit</button></td>
        </tr>
    </table>
    </form>
    
    1. 具有验证器类

    @Component

    public class PersonFormValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return PersonForm.class.equals(clazz);
    }
    
    @Override
    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmpty(errors, "name", "field.name.empty");
        PersonForm p = (PersonForm) target;
    
        if (p.getName().equalsIgnoreCase("XXX")) {
            errors.rejectValue("name", "Name cannot be XXX");
        }
    }}
    
    1. 将验证器绑定到控制器,然后让spring做魔术。

    @Controller

    public class WebController {
    @Autowired
    PersonFormValidator personFormValidator;
    
    
    @InitBinder("personForm")
    protected void initPersonFormBinder(WebDataBinder binder) {
    binder.addValidators(personFormValidator);
    }
    
    @PostMapping("/personForm")
    public String checkPersonInfo(@Validated PersonForm personForm, BindingResult bindingResult, final RedirectAttributes redirectAttributes) {
    if (bindingResult.hasErrors()) {
        return "personForm";
    }
    redirectAttributes.addFlashAttribute("personResult",  apiClientService.getPersonResult(personForm));
    return "redirect:/spouseForm";
    }
    }
    

答案 1 :(得分:0)

@PostMapping("/cal-bmi")
public String calculateBmiForm(Model model, Integer masa, Integer wzrost) {

String x = String.valueOf(masa);
    String y = String.valueOf(wzrost);


    if(x==null ){
    model.addAttribute("wzrost",true);
    return"views/success";
}
    if(y==null ){
        model.addAttribute("wzrost",true);
        return"views/success";
    }
}

当我从masa和wzrost中获取评估表时,我从null进行检查,我点击提交alwas nullpointerexception

 <form th:action="@{/cal-bmi}" method="post">

    <ul class="gender-options">
        <input id="man" type="radio" name="gender" value="male" required  />
        <label for="man">mężczyzna</label> &frasl;
        <input id="woman" type="radio" name="gender" value="female"/>
        <label for="woman">kobieta</label>
    </ul>


    Masa: <input type="number" class="form-control form-text" required placeholder="(kg)" name="masa"/>

    <!--<div class="text col-sm-12 error" th:if="${wzrost}">-->
        <!--<p class="text text-center">-->
            <!--To pole jest wymagane-->
        <!--</p>-->
    <!--</div>-->
    Wzrost: <input type="number" class="form-control form-text " required placeholder="(cm)" name="wzrost"/>

    <!--<div class="text col-sm-12 error" th:if="${wzrost}">-->
        <!--<p class="text text-center">-->
            <!--To pole jest wymagane-->
        <!--</p>-->
    <!--</div>-->
    <input type="submit" class="col-lg-10 btn btn-primary" value="Oblicz"/>
</form>

现在我使用了必填项,但不是很好的解决方案