Series JSF – Phần 9 Các thẻ (tag) Validator, validate trong JSF Framework.
Tương tự khả năng convert dữ liệu, JSF cũng cung cấp khả năng validate (kiểm tra tính hợp lệ) của dữ liệu bên trong chính các UI component. Những thẻ này có thẻ validate chiều dài, loại dữ liệu hoặc bạn cũng có thể tự định nghĩa kiểu validate cho riêng mình.
Để sử dụng những thẻ này chúng ta cần khai báo namespaces của nó:
<html xmlns = "http://www.w3.org/1999/xhtml" xmlns:f = "http://java.sun.com/jsf/core">
JSF cung cấp một só thẻ validator sau:
- f:validateLength (validate chiều dài của tex
- f:validateLongRange (validate giá trị của số nguyên)
- f:validateDoubleRange (validate giá trị số thực);
- f:validateRegex (validate theo mẫu pattern)
- Hoặc bạn có thể tự tạo các thẻ validator theo ý của mình.
1. Thẻ f:validateLength
Ví dụ: đoạn code dưới đây validate dữ liệu nhập vào phải có ít nhất 5 ký tự và nhiều nhất 8 ký tự và không được phép để trống.
<h:inputText id="input-name" value="#{helloBean.name}" label="name" required="true"> <f:validateLength minimum="5" maximum="8" /> </h:inputText> <h:message for="input-name" style="color: red"/>
Trong đó:
- Tham số required = “true” validate bắt buộc phải nhập.
- h:message for=”input-name” dùng để hiển thị message lỗi cho input có id =”input-name”
2. Thẻ f:validateLongRange và f:validateDoubleRange
Ví dụ: đoạn code dưới đây yêu cầu nhập tuổi từ 1-50, nhập rank từ 1.0-10
Age: <h:inputText id="input-age" value="#{helloBean.age}" label="age" required="true"> <f:validateLongRange minimum="1" maximum="50" /> </h:inputText> <h:message for="input-age" style="color: red" /><br/> Rank: <h:inputText id="input-rank" value="#{helloBean.rank}" label="rank" required="true"> <f:validateDoubleRange minimum="1.0" maximum="10.0" /> </h:inputText> <h:message for="input-rank" style="color: red" /><br/>
3. Thẻ: f:validateRegex
Ví dụ: đoạn code dưới đây yêu cầu nhập đúng định dạng email:
Email: <h:inputText id="input-email" value="#{helloBean.email}" label="email" required="true"> <f:validateRegex pattern="^[_A-Za-z0-9-\+]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\.[A-Za-z0-9]+)*(\.[A-Za-z]{2,})$" /> </h:inputText> <h:message for="input-email" style="color: red" /><br/>
4. Tạo thẻ validator (customer validator)
Định nghĩa validator qua class Java bằng cách implements Validator.
Ví dụ ở đây mình tạo class IdValidator thực hiện validate dữ liệu yêu cầu bắt buộc phải bắt đầu bằng “id”
@FacesValidator("stackjava.com.validatortag.idValidator") public class IdValidator implements Validator { public void validate(FacesContext facesContext, UIComponent component, Object value) throws ValidatorException { String password = value.toString(); if (!password.startsWith("id")) { FacesMessage msg = new FacesMessage("Password validation failed", "Invalid Password format"); msg.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(msg); } } }
id: <h:inputText id="input-id" value="#{helloBean.id}" label="id" required="true"> <f:validator validatorId="stackjava.com.validatortag.idValidator" /> </h:inputText> <h:message for="input-id" style="color: red" /> <br />
Kết quả:
Trường hợp để trống:
Trường hợp nhập sai định dạng
Trường hợp nhập đúng định dạng
Okay, Done [wp-svg-icons icon=”lightning” wrap=”i”]
Các bạn có thể download code đầy đủ của ví dụ trên tại đây
Phần tiếp theo chúng ta sẽ tìm hiểu về Ajax trong JSF: https://stackjava.com/jsf/series-jsf-phan-10-xu-ly-ajax-trong-jsf-framework.html
Thanks các bạn đã theo dõi bài viết!