Thứ Tư, 17 tháng 8, 2016

Sử dụng Validation trong Struts Framework

Sử dụng Validation trong Struts Framework

Mục đích: Chủ đề của bài này đề cập đến khái niệm tổng quát về validation của Struts 1.x Framework. Chúng tôi sẽ tiếp cận tổng quát khái niệm từng thành phần của validation trong Struts để từ đó chúng ta sẽ áp dụng validation trên ứng dụng áp dụng Struts Framework. Thông qua các khái niệm, chúng tôi sẽ thực hiện một ví dụ cụ thể để validation trong quá trình xử lý của ứng dụng. Ở đây, chúng tôi áp dụng cả 02 cách thức validation được nêu ra trong khái niệm về validation của Struts Framework

Sử dụng Validation trong Struts Framework

Mục đích: Chủ đề của bài này đề cập đến khái niệm tổng quát về validation của Struts 1.x Framework. Chúng tôi sẽ tiếp cận tổng quát khái niệm từng thành phần của validation trong Struts để từ đó chúng ta sẽ áp dụng validation trên ứng dụng áp dụng Struts Framework. Thông qua các khái niệm, chúng tôi sẽ thực hiện một ví dụ cụ thể để validation trong quá trình xử lý của ứng dụng. Ở đây, chúng tôi áp dụng cả 02 cách thức validation được nêu ra trong khái niệm về validation của Struts Framework

Khái niệm về quản lý error trong Struts Framework (Struts Error Management)

  • Struts hỗ trợ 02 class quản lý lỗi đó là ActionError và ActionErrors
    • Class ActionError dùng để xử lý và trình bày lỗi khi lỗi được phát sinh thông qua ActionMessage. ActionError class nằm trong gói org.apache.struts.action
    • Class ActionErrors dùng để tạo ra collection để thu thập một tập lỗi trong ActionError.
    • Class ActionMessage
      • Chứa đựng thành phần liên quan đến message liên quan đến lỗi trong 02 thành phần class nêu ở trên
      • Một object ActionMessage chứa 02 thành phần: phần thứ nhất là key dùng để truy cập message, phần còn lại dùng để truyền tham số (place holder) để đưa các thông tin cần thiết để tạo ra message có nghĩa
  • Để xử lý lỗi trong quá trình nhập liệu Struts đưa ra 02 cách để xử lý đó là lập trình trực tiếp trong code và khai báo thông qua việc sử dụng validation frame work – một plugin của Struts Framework
    • Lập trình trực tiếp
      • Người lập trình cài đè overriding phương thức validate() trong Action Form Bean
      • Thực hiện cài đặt việc xử lý liên quan đến lỗi của chương trình thông qua các thành phần quản lý lỗi nêu ra ở trên, cụ thể là trong quá trình kiểm tra nếu không thỏa yêu cầu chúng ta sẽ add message sử dụng ActionMessage vào ActionError tương ứng
      • Cơ chế hoạt động

        • Sau khi user nhập liệu trên form và submit thông tin trở về server
        • Trong struts framework, request được action Servlet chuyển đến ActionForm, vì action Form đã được cài đặt hàm validate do vậy dữ liệu sẽ được checking trong hàm validate theo nội dung cài đặt
        • Hàm validate đươc xem như là lính canh hay là đối tượng kiểm soát, nếu như không có Error nào phát sinh thì request sẽ đuợc chuyển đến Action Class tương ứng được mapping trong struts-config
        • Ngược lại, khi có lỗi phát sinh, ActionError khác rỗng thì request sẽ không đưa đến Action mà container hay Action Servlet sẽ response lại errors về phía client – browser cho người dùng
    • Struts Validation Framework
      • Hỗ trợ chức năng validate trên form trên cả client (browser) lẫn server.
      • Phát sinh cả code javascript trên server để validate form nhập liệu.
      • Sử dụng sub class của DynaValidatorForm để validate trên server.
      • Sử dụng tập tin validator-rules.xml
        • Định nghĩa các constraints dùng javascripts cho validate
        • Các constraints này được áp dụng trong tập tin validation.xml (xác định validate cụ thể cho từng thuộc tính hay từng field áp dụng cho form bean)
      • Config để validator framework để hỗ trình bày error trên client thông qua file truts-config.xml và tạo message báo lỗi qua *.properties
      • Kích hoạt validation trên action bằng cách thiết lập thuộc tính validation=“true” trong action-mapping
      • Các thành phần trong tập tin validator-rules.xml
        • form-validation: root của tài liệu xml này
        • global: xác định thành phần của rules và có thể truy cập từ các form.
        • validator: xác định đối tượng validator – constraints
          • name: tên validator
          • classname: tên class form bean
          • method: tên phương thức trong form bean
          • methodParams: các tham số truyền cho phương thức
          • msg: các message báo lỗi
          • depends: xác định validation constraints được áp dụng cho từng đối tượng cụ thể
          • jsFunctionName: tên của chức năng javascript
        • javascript: chứa code validation của javascript trên client
      • Các thành phần trong tập tin validation.xml
        • form-validation: root
        • global: chứa đựng các constant element.
        • constant: xác định các pattern
          • constant-name: tên constant
          • constant-value: giá trị constant
        • formset: chứa đựng các form element.
          • form: xác định thành phần của form
            • name: tên form
            • Chứa các field element xác định thành phần cần validation
          • field: xác định validation trên control trên form
            • property: xác định tên field trên form bean
            • depends: xác định constraint áp dụng từ validator-rules.xml
            • Chứa các thiết lập cho tham số qua arg
          • arg:
            • key dùng xác định giá trị trong việc xuất thông báo lỗi
            • Chứa các khai báo thông qua thuộc tính var để xác định các ràng buộc cần validation
          • var:
            • var-name: điều kiện validation
            • var-value: công thức validation
      • Để struts validation framework được kích hoạt bởi struts framework chúng ta cần chỉnh sửa thông tin cấu hình trong struts-config.xml như sau
        • Bản chất validator là plugin của struts do vậy chúng ta phải khai báo trong struts framework như sau

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">

    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEBINF/validation.xml"/>

  </plug-in>

        • Để struts framework hỗ trợ và xử lý thông báo lỗi trong quá trình thực thi, chúng ta phải xác định tập tin chứa message để struts có thể truy xuất

<message-resources parameter="resources.application" />

Vận dụng Struts Validation Framework vào validation một form nhập liệu cài đặt một ứng dụng cụ thể (ở đây chúng tôi sẽ dùng lại ứng dụng trong bài “Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web” để thực hiện validation bằng phương lập trình trực tiếp để bắt lỗi trên form login và áp dụng Struts Validation Framework trên form Register)

  • Ứng dụng ở đây mô tả việc validation trên form Login và Register như sau
    • Form Login
      • Khi form Login hiển thị, người dùng nhấn Login mà không nhập gì cả thì trang web thông báo username và password không được phép null
      • Người dùng nhập và bỏ trống một trong 02 field username và password thì thông báo cũng xuất hiện tương tự
      • Khi người dùng nhập đầy đủ thì hệ thống thực hiện check login như bài Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web
    • Form Register
      • Yêu cầu người dùng phải đăng ký username phải là một địa chỉ email, password phải bắt buộc có và có kích thước từ 6 đến 20 ký tự, và lastname phải có tối thiểu 6 ký tự
      • Sử dụng validation Framework để bắt lỗi, nếu người dùng không đúng ràng buộc thì trang web sẽ trình bày lỗi trên màn hình
      • Ngược lại chương trình để xử lý cho việc register
  • Yêu cầu
    • Nắm vững các khái niệm về MVC, Struts Framework 1.x
    • Nắm vững về ngôn ngữ lập trình Java, lập trình thao tác hướng đối tượng
    • Cách thức sử dụng JSTL, EL, HTML
    • Nắm vững cách thức cài đặt ứng dụng Struts Framework 1.x, EJB3
    • Đã hoàn tất bài Sử dụng Struts Framework kết hợp với EJB 3 để hỗ trợ xây dựng ứng dụng Web
    • Tools sử dụng ở đây là Netbeans 6.9.1
    • JDK 6 update 22
    • Server: JBoss 5.1.0GA  
    • DBMS: SQL Server 2005
    • Thư viện hỗ trợ: JSTL 1.1, Driver kết nối database SQLServer (sqljdbc.jar hay sqljdbc4.jar)
  • Các bước thực hiện
    • Vào Tool Netbeans 6.9.1 để mở lại các Project có tên EJB3EntityStrutsCombine, EJB3EntityStruts và Day7EJB3Entity (lưu ý: khi chọn Open Project, phải mở rộng – expand thành phần của project để mở luôn 02 thư mục project con là war và jar ở bên trong – sử dụng tổ hợp phím Shift để chọn 03 project – 1 project ear, 1 project jar và 1 project war), Project được load hay mở vào trong NetBeans như sau

    • Chúng ta sẽ tập trung xử lý Struts trên EJB3EntityStruts như sau
      • Chúng ta mở trang login.jsp
      • Bổ sung các taglig hỗ trợ cho Struts, cụ thể logic tag và html tag
      • Logic tag được dùng để hỗ trợ chúng ta trình bày message lỗi ra màn hình nếu error khác rỗng
      • Html tag được dùng để get message lỗi được trả về bởi action servler và struts error management

        • Trong phần code bổ sung trên chúng ta thấy html:message giúp chúng ta lấy tập lỗi về và gán vào attribute error để có thể in ra màn hình tất cả lỗi
        • logic:messagePresent tag được dùng để kiểm tra nếu lỗi khác rỗng thì mới vào phần thân của tag để xử lý
      • Tiếp theo, bởi vì chúng ta cần validation bằng cách lập trình trực tiếp, do vậy chúng ta mở tập tin LoginActionForm.java để cài đặt phương thức validate
        • Trong tập tin LoginActionForm.java, chúng ta gõ chữ valid và nhấn tổ hợp phím ctrl + space bar để chọn hàm validate có tham số HttpServletRequest

        • Chúng ta thực hiện cài đặt hàm validate cụ thể nếu kích thước chuỗi của username là bằng 0 thì chúng ta sẽ add message tương ứng vào ActionMessage và đưa vào ActionErrors, tương tự cho password

        • Lưu ý:
          • Giá trị tạo lập trong Action Message không phải là giá trị message trình bày mà là key value để chúng ta khai báo trong message resource (tập tin property) để tạo nên sự uyển chuyển trong việc trình bày về phía người dùng
          • Chúng ta nên đặt theo dạng để dễ nhớ và dễ hiểu dạng tên_Form.tên_Field_validation.tên_ràng_buộc
        • Chúng ta tìm tập tin ApplicationResources.properties trong com.myapp.struts để bổ sung key message và message tương ứng cần trình bày. Chúng ta truy cập tập tin này trong struts-config đã tự động set default reference đến tập tin này

        • Chúng ta bổ sung message (Lưu ý: nên copy toàn từng nhãn dán vào cuối file và đưa ra định nghĩa để tránh sai sót)

        • Chúng ta mở lại tập tin struts-config.xml, di chuyển đến phần action của phần login, chúng ta nhìn thấy như sau

          • Validation được được xác định là false nghĩa là struts sẽ không kích hoạt được hàm validation khi request được chuyển đến action form, do vậy, chúng ta sẽ bỏ thuộc tính này cũng có nghĩa thiết lập validate là true

        • Chúng ta đã cấu hình hoàn tất validation lập trình trực tiếp cho Login
      • Start Server JBoss, Build Project, Deploy và Test

        • Không nhập gì cả, nhấn Login

        • Nhập username, nhấn login

        • Nhập password và nhấn Login

 

      • Chúng ta đã hoàn tất xong phần validation cho Login
    • Chúng ta thực hiện chức năng validation cho Register
      • Với chức năng này, chúng ta sẽ sử dụng Struts Validation Framework để cấu hình việc validation với dynamic Validator form
      • Đầu tiên chúng ta sẽ add dynamic Validator form vào hệ thống
        • Mở tập tin struts-config.xml
        • Di chuyển đến phần form-beans, nhấn phải chuột, chọn Struts, chọn Add Action Form Bean

        • Nhập tên form vào ActionForm Bean Name (cụ thể ở đây là RegisterDynamic Form)
        • Chọn option Dynamic, click chọn combo box, chọn DynaValidatorForm như hình bên dưới. Đây là class Form Bean do struts hỗ trợ để đón nhận xử lý và mapping validation từ các field được khai báo trong tập tin validation.xml theo cách tương tự chúng ta viết code trực tiếp trong hàm validate bằng tay trong code của Form Bean

        • Chúng ta nhấn nút Add, code được cập nhật như hình bên dưới

        • Chúng ta tiếp tục thực hiện add các thuộc tính cho form này bằng cách nhấn chuột phải trên form-bean của RegisterDynamicForm, chọn Struts, chọn Add ActionForm Bean Property

        • Chúng ta nhập tên field cho PropertyName (cụ thể ở đây là username), xác định kiểu dữ liệu trong PropertyType (cụ thể đây là kiểu String)

        • Chúng ta nhấn nút Add và tiếp tục add thuộc tính password và lastname tương tự như username. Code phát sinh như sau

      • Chúng ta cần thay đổi cấu hình của form Register, vì trước kia chúng ta đang đón nhận dữ liệu trực tiếp không qua form và không validate

      • Thực hiện thay đổi code bằng cách bỏ validate=”false” đi, bổ sung thuộc tính để xác định tên Action Form thông qua name=”registerDynamicForm” và trang đón giá trị nhập thông qua trang jsp thuộc tính input=”/register.jsp”

        • Chúng ta thực hiện bổ sung vào trang register
          • Phần xử lý thông báo lỗi phần Action Message và Action Errors như trang login
          • Đưa việc xử lý lỗi vào biến cố onsubmit của form.
          • Lưu ý: giá trị trong onsubmit là thực hiện gọi hàm của javascript với dạng return validateTen_form_bean_viết_in_chữ_đầu(this);
            • Cụ thể ở đây là onsubmit=”return validateRegisterDynamicForm(this);”
            • Do vậy cần lưu ý khi đặt tên form bean, tên form phải bắt đầu bằng chữ thường (trong quá trình tạo dynamic validator form, chúng tôi lại đặt là registerDynamicForm)

        • Sau khi đã khai báo form bean, khai báo cấu hình về validation và check kích hoạt validation trên giao diện, cho từng phải khai báo rules được áp dụng cho từng thuộc tính trong action form thông qua tập tin validation.xml
          • Tập tin validation.xml nằm tại thư mục Configuration file hay tại thư mục WEB-INF

          • Trong tập tin validation.xml, chúng ta di chuyển đến sau tag global, gõ tag <formset>
          • Lưu ý ở đây dùng tổ hợp phím Ctrl + Space bar để hỗ trợ bung code và bung tag đóng tức thì sau khi viết. Rồi sau đó mới viết giá trị value vào trong tag
          • Chúng ta khai báo tên form cần validation thông qua tag form và thuộc tính name với giá trị là tên form cần validation

          • Thuộc tính depends được khai báo thể hiện field username được áp dụng các rules nào, ở đây là required nghĩa là bắt buộc phải có và tuân theo chuẩn về email
          • Để xác định tham số trong rules, chúng ta mở tập tin ApplicationResource.properties để xác định số lượng placeholder hay tham số cần khai báo cho từng rule, thông qua ký hiệu {số} trong các message tương ứng
            • Ví dụ trong email chỉ có 1 tham số

            • Tương tự cho required
          • Nếu số lượng tham số là 1 chúng ta dùng tag arg, nếu nhiều hơn 1 tham số trong message, chúng ta dùng arg1 trở đi
          • Chúng ta bổ sung cho phần username với tag arg và thuộc tính key tương tự như login để chúng ta định nghĩa message khi lỗi xuất hiện. Lưu ý tên cần đặt theo qui tắc gợi nhớ như tên form.thuộc tính

          • Tương tự chúng ta đặt tiếp cho thuộc tính password với rules required, minlength – số lượng ký tự yêu cầu tối thiểu và maxleng – số lượng chữ tối đa
          • Vì minlength (6 ký tự) và maxlength có 02 tham số nên chúng ta dùng tag arg0 để xác định tên field thông báo lỗi và giá trị minlength để xác định kích thước thông qua name và thiết lập giá trị qua var-name : tên biến và trị được gán thông qua var-value
          • Tương tự cho maxlength với kích thước 20 ký tự

        • Áp dụng tương tự cho lastname với rules là required, minlength.
        • Chúng ta có code thiết lập validation cho Action form như sau

          • Trước khi thực thi, chúng ta cần định nghĩa các message cho các key mà chúng ta đã thiết lập cho form trong tập tin validation.xml ở trên
          • Chúng ta mở tập tin ApplicationResource.properties và bổ sung các key tương ứng (lưu ý : nên copy các key để định nghĩa, không nên gõ trực tiếp bằng tay)

        • Chúng ta thực hiện cập nhật bổ sung cho Action
          • Lấy giá trị được truyền từ Form để xử lý và insert xuống DB, cụ thể ở đây là Validator Form, form mà chúng ta đã map trong struts-config và xác định trang nhập qua name và input

        • Build ứng dụng, deploy gói ear vào JBoss server và test đến Register

        • Không nhập gì cả, nhấn Register

        • Nhập email sai và nhấn register

        • Nhập email đúng và nhấn Register

        • Nhập Password có 02 ký tự và nhấn Register

        • Nhập Password nhiều hơn 20 ký tự, nhấn Register

        • Nhập password đúng kích thước lớn hơn 6 và nhỏ hơn 20, nhấn register

        • Nhập lastname nhỏ hơn 6 ký tự, nhấn Register

      • Nhập đúng lastname, nhấn Register

        • DB được cập nhật như sau

Chúc mừng các bạn đã hoàn tất và nắm tổng quát khái niệm về Struts Validation 1.x Framework, cách thức validation trên ứng dụng có kết hợp với middleware. Qua đó chúng ta thấy được các ưu điểm và khuyết điểm của framework này.

Chúng tôi hy vọng nội dung của bài này giúp ích các bạn trong việc cài đặt mô hình ứng dụng web có kết hợp validation và kết hợp middleware

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở chủ đề khác

Không có nhận xét nào:

Đăng nhận xét