Struts yêu cầu xử lý vòng đời như là một kịch bản ngày hài lòng là - từ quan điểm người dùng gửi một Form html cho đến khi người dùng thấy trang kế tiếp. Trong thực tế, người sử dụng ứng dụng web của bạn có thể gửi dữ liệu không chính xác hoặc đôi khi không có dữ liệu nào cả. Bạn phải nắm bắt những lúc gần với giao diện người dùng càng tốt, thay vì chờ đợi cho các cơ sở dữ liệu cấp hoặc giữa cho cho bạn biết rằng một cột không thể được chèn vào trong cơ sở dữ liệu bởi vì nó đã được mong đợi một giá trị không null. Có hai hậu quả của việc thực hành lập trình như vậy.
- Máy chủ thời gian và nguồn lực quý giá kể từ khi họ được chia sẻ. Chi tiêu quá nhiều thời gian và tài nguyên của máy chủ yêu cầu một, mà chúng ta biết là sẽ thất bại cuối cùng là một sự lãng phí tài nguyên máy chủ.
- Nó có một tác động tiêu cực đến chất lượng mã. Kể từ khi người ta phải chuẩn bị cho khả năng có dữ liệu vô giá trị, kiểm tra thích hợp phải được đặt (hoặc NumberFormatExceptions đã bị bắt) ở khắp mọi nơi trong các mã.
Nói chung business logic là code khó khăn nhất của hệ thống và có đủ các khối if-else là như vậy. Các khối khác if-else cho kiểm tra chỉ có thể có nghĩa là null hai việc - code tồi và ác mộng bảo trì. Không phải là một chương trình thanh lịch cho nói rằng ít nhất là vậy. Nếu chỉ có bạn có thể xác minh tính hợp lệ của dữ liệu người dùng càng gần người sử dụng, khi đó phần còn lại trong mã này chỉ có để đối phó với logic business và dữ liệu không hợp lệ.
//validate() method in the CustomerForm
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request)
{
// Perform validator framework validations
ActionErrors errors = super.validate(mapping, request);
// Only need crossfield validations here
if (parent == null) {
errors.add(GLOBAL_ERROR, new ActionError("error.custform"));
}
if (firstName == null) {
errors.add("firstName", new ActionError("error.firstName.null"));
}
return errors;
}
Struts cung cấp validate () trong các ActionForm để giải quyết với xác nhận của người dùng. Bây giờ chúng ta nhìn vào cách bạn có thể xác nhận các lỗi người dùng nhập vào và báo cáo framework.
Việc validate() được gọi là sau khi dụ ActionForm là populated với các dữ liệu Form. Một template validate() được hiển thị phía trên. Trong method validate(), bạn sẽ thấy một đối tượng gọi là :
ActionErrors được khởi tạo. Tất cả các kiểm tra lỗi được thực hiện với các khối else if thông thường. Nếu có sai sót, khi đó một đối tượng ActionError cá nhân được tạo ra cho vào trường culprit và thêm vào ActionErrors. Hãy suy nghĩ trong ActionErrors như là một mapping cho các đối tượng ActionError riêng lẻ. Bạn có thể kết hợp một hoặc nhiều ActionError đối tượng cho phím. Tên Form lĩnh vực thường được chọn là khoá và có thể có nhiều đối tượng ActionError liên kết với nó. ActionError là một trong hai lĩnh vực cụ thể cho một trong ActionForm, hoặc nó là toàn cầu toàn bộ mẫu. Khi lỗi là một lĩnh vực cụ thể cho Form, tên trường được sử dụng như là chìa khóa trong ActionErrors. Khi lỗi là toàn cầu để hình thành, tên chính là luôn luôn GLOBAL_ERRORS. Cả hai trường hợp được thể hiện trong các bảng liệt kê ở trên.
Bạn cũng có thể nhận thấy rằng các nhà xây dựng ActionError có một khóa thay vì bí ẩn như là đối số. Khóa này được khai báo trong một tập tin tài sản có giá trị thông báo lỗi thực sự. Các tập tin thuộc tính được chọn dựa trên những người sử dụng lựa chọn Vị trí. Thuật ngữ kỹ thuật cho các thuộc tính tập tin, nơi các tin nhắn được externalized là tin nhắn Resource Bundle. Nó dựa trên Java của khái niệm trong các địa phương sử dụng các java.util.ResourceBundle và có một toàn bộ rất nhiều chuông và whistles. Các tập tin thuộc tính cũng phục vụ một mục đích khác ngoài việc các địa phương. Nó cho phép bạn thay đổi các tin nhắn mà không cần biên dịch lại mã này, và khá tiện dụng trong khi duy trì mã. Một nhập trong tập tin nguồn tin thuộc tính Bundle hình như:
error.firstName.null=First Name cannot be null
RequestProcessor dừng việc xử lý thêm khi nó được các đối tượng ActionErrors với các đối tượng ActionError. Các trường hợp Action không bao giờ được kiểm soát (và không bao giờ được một cơ hội cho trở về ActionForward). Do đó RequestProcessor các tham vấn các đối tượng ActionMapping cho tìm trang được hiển thị. Chú ý rằng ActionMapping có một thuộc tính có tên là "đầu vào". Thuộc tính này quy định các trang vật lý mà yêu cầu phải được gửi về lỗi. Thông thường trang này là trang gốc mà người dùng nhập dữ liệu vì nó là tự nhiên mà người dùng sẽ muốn nhập lại dữ liệu trong cùng một trang về lỗi và gửi lại.
DangTrung.
Không có nhận xét nào:
Đăng nhận xét