подтвердить ввод в Thymeleaf - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть этот ввод:

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 голосов
/ 20 ноября 2018
@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, я проверяю с нуля, я нажимаю "отправить" уже было 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>

Теперь я использовал требуемый, но не хорошее решение

0 голосов
/ 19 ноября 2018

Кажется, вы хотите реализовать проверку на стороне сервера.Для этого лучшим подходом является использование валидаторов и его 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>
    
  3. Имеет класс валидатора

@ 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");
    }
}}
Свяжите валидатор с контроллером и позвольте весне творить чудеса.

@ 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";
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...