Bước 2 - Kết quả & Loại kết quả

Như đã đề cập trước đây, <results> thẻ đóng vai trò của một viewtrong khung Struts2 MVC. Hành động chịu trách nhiệm thực hiện logic nghiệp vụ. Bước tiếp theo sau khi thực hiện logic nghiệp vụ là hiển thị dạng xem bằng cách sử dụng<results> nhãn.

Thường có một số quy tắc điều hướng được đính kèm với kết quả. Ví dụ: nếu phương pháp hành động là xác thực người dùng, có ba kết quả có thể xảy ra.

  • Đăng nhập thành công
  • Đăng nhập không thành công - Tên người dùng hoặc mật khẩu không chính xác
  • Tài khoản bị khóa

Trong trường hợp này, phương thức hành động sẽ được định cấu hình với ba chuỗi kết quả có thể có và ba chế độ xem khác nhau để hiển thị kết quả. Chúng ta đã thấy điều này trong các ví dụ trước.

Tuy nhiên, Struts2 không ràng buộc bạn với việc sử dụng JSP làm công nghệ xem. Sau cùng, toàn bộ mục đích của mô hình MVC là giữ cho các lớp tách biệt và có thể định cấu hình cao. Ví dụ: đối với máy khách Web2.0, bạn có thể muốn trả về XML hoặc JSON làm đầu ra. Trong trường hợp này, bạn có thể tạo một kiểu kết quả mới cho XML hoặc JSON và đạt được điều này.

Struts đi kèm với một số result types và bất cứ điều gì chúng ta đã thấy đó là loại kết quả mặc định dispatcher, được sử dụng để gửi đến các trang JSP. Struts cho phép bạn sử dụng các ngôn ngữ đánh dấu khác cho công nghệ chế độ xem để trình bày kết quả và các lựa chọn phổ biến bao gồmVelocity, Freemaker, XSLTTiles.

Loại kết quả của người điều phối

Các dispatcherloại kết quả là loại mặc định và được sử dụng nếu không có loại kết quả nào khác được chỉ định. Nó được sử dụng để chuyển tiếp đến một servlet, JSP, trang HTML, v.v. trên máy chủ. Nó sử dụng phương thức RequestDispatcher.ionary () .

Chúng tôi đã thấy phiên bản "tốc ký" trong các ví dụ trước đó của chúng tôi, nơi chúng tôi cung cấp một đường dẫn JSP làm phần nội dung của thẻ kết quả.

<result name = "success">
   /HelloWorld.jsp
</result>

Chúng tôi cũng có thể chỉ định tệp JSP bằng thẻ <param name = "location"> trong phần tử <result ...> như sau:

<result name = "success" type = "dispatcher">
   <param name = "location">
      /HelloWorld.jsp
   </param >
</result>

Chúng tôi cũng có thể cung cấp một parse, theo mặc định là đúng. Tham số phân tích cú pháp xác định xem tham số vị trí có được phân tích cú pháp cho các biểu thức OGNL hay không.

Loại kết quả FreeMaker

Trong ví dụ này, chúng ta sẽ xem cách chúng ta có thể sử dụng FreeMakernhư công nghệ xem. Freemaker là một công cụ tạo khuôn mẫu phổ biến được sử dụng để tạo đầu ra bằng các mẫu được xác định trước. Bây giờ chúng ta hãy tạo một tệp mẫu Freemaker có tên làhello.fm với các nội dung sau -

Hello World ${name}

Tệp trên là một mẫu trong đó namelà một tham số sẽ được truyền từ bên ngoài bằng hành động đã xác định. Bạn sẽ giữ tệp này trong CLASSPATH của mình.

Tiếp theo, hãy để chúng tôi sửa đổi struts.xml để xác định kết quả như sau:

<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
   <constant name = "struts.devMode" value = "true" />
   <package name = "helloworld" extends = "struts-default">

      <action name = "hello" 
         class = "com.tutorialspoint.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success" type = "freemarker">
            <param name = "location">/hello.fm</param>
         </result>
      </action>
      
   </package>

</struts>

Hãy để chúng tôi giữ các tệp HelloWorldAction.java, HelloWorldAction.jsp và index.jsp như chúng tôi đã tạo trong chương ví dụ.

Bây giờ Nhấp chuột phải vào tên dự án và nhấp vào Export > WAR File để tạo tệp Chiến tranh.

Sau đó, triển khai WAR này trong thư mục ứng dụng web của Tomcat. Cuối cùng, khởi động máy chủ Tomcat và cố gắng truy cập URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Điều này sẽ tạo ra màn hình sau.

Nhập giá trị "Struts2" và gửi trang. Bạn sẽ thấy trang tiếp theo.

Như bạn có thể thấy, điều này giống hệt như khung nhìn JSP ngoại trừ việc chúng tôi không bị ràng buộc với việc sử dụng JSP làm công nghệ khung nhìn. Chúng tôi đã sử dụng Freemaker trong ví dụ này.

Loại kết quả chuyển hướng

Các redirectloại kết quả gọi phương thức response.sendRedirect () tiêu chuẩn , khiến trình duyệt tạo một yêu cầu mới đến vị trí đã cho.

Chúng tôi có thể cung cấp vị trí trong phần thân của phần tử <result ...> hoặc dưới dạng phần tử <param name = "location">. Redirect cũng hỗ trợparsetham số. Đây là một ví dụ được định cấu hình bằng XML -

<action name = "hello" 
   class = "com.tutorialspoint.struts2.HelloWorldAction"
   method = "execute">
   <result name = "success" type = "redirect">
      <param name = "location">
         /NewWorld.jsp
      </param >
   </result>
</action>

Vì vậy, chỉ cần sửa đổi tệp struts.xml của bạn để xác định loại chuyển hướng như đã đề cập ở trên và tạo tệp mới NewWorld.jpg nơi bạn sẽ được chuyển hướng bất cứ khi nào hành động hello sẽ trả về thành công. Bạn có thể kiểm tra ví dụ về Hành động chuyển hướng của Struts 2 để hiểu rõ hơn.