Results và Result Type trong Struts 2




Thẻ <results> đóng vai trò của một view trong Struts 2 Framework. Action thì chịu trách nhiệm thực thi trình logic riêng. Sau khi thực thi trình logic riêng, thì bước tiếp theo là để hiển thị view bởi sử dụng thẻ <results>.

Thường thì có một số qui tắc điều hướng được đính kèm với result. Ví dụ, nếu action là để xác nhận một người dùng thì có thể có 3 kết quả là: Đăng nhập thành công, Đăng nhập không thành công (sai tên đăng nhập hoặc mật khẩu) và Tài khoản bị khóa.

Như trong các chương trước, bạn đã thấy result type mặc định là dispatcher mà được sử dụng để truyền tới JSP page. Ngoài ra, trong chương này, chúng ta cùng tìm hiểu thêm về FreeMaker result type và redirect result type.

Dispatcher result type trong Struts 2

Đây là kiểu mặc định và được sử dụng nếu không có result type nào được xác định. Nó được sử dụng để chuyển tiếp tới một Servlet, JSP, HTML page, … trên Server. Nó sử dụng phương thức RequestDispatcher.forward().

Ví dụ dưới đây, chúng ta cung cấp một JSP path như là thân của thẻ result.

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

Bạn cũng có thể xác định JSP file bởi sử dụng thẻ <param name="location"> bên trong phần tử <result...> như sau:

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

Bạn cũng có thể cucng cấp một tham số parse, mà là true theo mặc định. Tham số parse này xác định có hay không tham số location sẽ được parse cho các biểu thức OGNL.

FreeMarker result type trong Struts 2

FreeMarker là một phương tiện tạo mẫu phổ biến, được sử dụng để tạo output bởi sử dụng các Template đã được định nghĩa trước. Chúng ta tạo hello.fm có các nội dung sau:

Hello World 

Ở file trên là một template, với name là một tham số mà sẽ được parse từ bên ngoài bởi sử dụng action đã được định nghĩa. Bạn giữ file này trong CLASSPATH. Tiếp đó, sửa đổi struts.xml để xác định result 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.vietjack.struts2.HelloWorldAction"
         method="execute">
         <result name="success" type="freemarker">
            <param name="location">/hello.fm</param>
         </result>
      </action>
      
   </package>

</struts>

Giữ HelloWorldAction.java, HelloWorldAction.jsp, và index.jsp như trong chương Ví dụ. Sau khi khởi động Server và chạy ứng dụng, bạn thử nhập một giá trị "Struts2" và đệ trình trang này. Bạn sẽ thấy page tiếp theo.

redirect result type trong Struts 2

redirect result type gọi phương thức chuẩn response.sendRedirect(), làm cho trình duyệt tạo một request mới tới vị trí location đã cho.

Bạn có thể đặt location hoặc trong thân của phần tử <result...> hoặc như là một phần tử <param name="location">. Result type này cũng hỗ trợ tham số parse. Ví dụ sau sử dụng XML:

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