Compared to the minimal app discussed in Part 1 (Minimal App Tutorial) we have to deal with a number of new issues:
In the model layer we have to take care of adding for every property the constraints that must be checked before allowing a record to be saved to the database
In the user interface (view) we have to take care of form validation providing feedback to the user whenever data entered in the form is not valid.
Checking the constraints in the user interface on user input is important for providing immediate feedback to the user. Using JSF and Bean Validation requires to submit the form before the validation checks are performed. It would be preferable to define the validation checks in the model classes only and use them in the user interface before form submission, without having to duplicate the validation logic in the JSF facelets. However, at this point in time, JSF does not support this, and the validation is performed only after the form is submitted.
Using HTML5 validation attributes in the JSF facelets to enforce HTML5 validation before submitting the form requires an undesirable duplication of validation logic. The effect of such a duplication would be duplicate maintenance of the validation code, once in the model classes and once more in the user interface. In a simple application like our example app, this is doable, but in a larger application this quickly becomes a synchronization nightmare.