2013-04-08 32 views
5

Tôi cần một cách để thực hiện nhiều hành động thanh chống với một yêu cầu. Mục đích là để giảm thiểu sự cần thiết của yêu cầu đối với máy chủ. Vì vậy, những gì tôi cần là một cái gì đó giống như một "MultiAction" mà được một danh sách các hành động như các thông số của nó mà nó nên thực hiện và sau đó trở về một kết hợp "kết hợp" của hành động này.Thực hiện nhiều hành động cái khác

Ví dụ:

  • Các khách hàng được chia ra trong rất nhiều module
  • Một mô-đun cần để có được thông tin từ máy chủ
  • Có một proxy tại client xử lý yêu cầu này
  • proxy này bây giờ đi và nói "Hey bạn module khác, tôi sẽ làm cho một rquest đến máy chủ, bạn cần bất cứ điều gì?"
  • Các module khác bây giờ có thể tùy chọn nộp đơn yêu cầu tại proxy
  • Sau đó, thực tế "kết hợp" yêu cầu được bắn đến máy chủ và kết quả là một lần nữa chia tay và trao cho các module đã yêu cầu nó

Vì vậy, câu hỏi của tôi là:

  1. Có cách nào tiêu chuẩn trong Struts2 về cách thực hiện điều gì đó như thế này không?
  2. Có cách nào "công khai" tiêu chuẩn gọi hành động khác theo cách thủ công và nhận kết quả từ Ngăn xếp giá trị không?
+0

Bạn có thể tạo ra ví dụ cơ bản trong thế giới thực về điều này không? –

+3

Có chuỗi hành động, hầu như luôn là một ý tưởng tồi. Có thẻ Actonj như đã đề cập.Điều đó nói rằng, rất khó để tôi hình dung ra nơi này sẽ hữu ích - có vẻ như bạn có quá nhiều hành vi được yêu cầu từ nơi sai. –

Trả lời

0

Yêu cầu> Hành động 1> Hành động 2> Trả lời Trong Struts 2, điều này có thể đạt được bằng Kết quả chuỗi. Kết quả chuỗi là một kiểu kết quả gọi một hành động với ngăn xếp và kết quả ngăn xếp của nó. Interceptor này cho phép một hành động chuyển tiếp các yêu cầu đến một hành động đích, trong khi truyền bá trạng thái của hành động nguồn. Dưới đây là một ví dụ về cách xác định trình tự này.

<package name="public" extends="struts-default"> 
      <action name="createUserAccount" 
       class="net.onlineSolution.CreateAccountAction"> 
       <result name="success" type="chain">login</result> 
      </action> 
      <action name="login" 
       class="net.onlineSolution.LoginAction"> 
       <result name="success" type="chain">showDashboard</result> 
      </action> 
      <action name="showDashboard" 
       class="net.onlineSolution.DashboardAction"> 
       <result name="success">/WEB-INF/jsp/dashboard.jsp</result> 
      </action> 
    </package> 

Trong mã trên, chúng tôi xác định ba hành động: createUserAccount, login and showDashboard. Lưu ý cách mỗi hành động được xích vào thẻ tiếp theo bằng cách sử dụng. Do đó khi người dùng đăng nhập lần đầu tiên trong hệ thống, hành động createAccount sẽ được sử dụng. Khi tài khoản được tạo, người dùng được chuyển tiếp để đăng nhập hành động.

0

Vâng. Nó là rất có thể bằng cách sử dụng một loại kết quả thanh chống đơn giản. Để xử lý nhiều tác vụ trong một hành động, bạn có thể sử dụng <result name="success" type="redirectAction"></result> trong thuộc tính kết quả của mình. Với nhiều tác vụ đó, bạn cũng có thể chuyển số tham số n bằng cách sử dụng thuộc tính <param> của struts.xml. Mã mẫu sau để bạn tham khảo: -

<result name="success" type="redirectAction"> 
    <param name="actionName">[.. you can write another action here ..]</param> 
    <param name="[.. parameter name ..]">${.. parameter name ..}</param> 
</result> 
2

Điều này có thể đạt được bằng cách sử dụng "redirectAction" trong loại kết quả. mã sau là ví dụ cho cùng. bạn phải cấu hình thẻ hành động trong thanh công cụ XML theo yêu cầu của bạn về việc sử dụng các Hành động lồng nhau.

 <action name="userHomeAction" class="com.etp.connect.struts.action.UserHomeAction"> 
     <result type="redirectAction" name="SUCCESS_EDIT"> 
      <param name="actionName">getUserEditData</param> 
      <param name="selectedUser">${selectedUser}</param>   
     </result> 
     <result name="error">/jsp/userMgmt/Users_Home.jsp</result> 
     <result name="login">/jsp/loginMgmt/Login.jsp</result> 
    </action> 
Các vấn đề liên quan