2011-09-26 19 views
8

Ví dụ sau: Tôi có một siêu lớp và phân lớp cho một hành động struts. Siêu lớp xác định @Results và lớp con cần xác định các mục bổ sung cụ thể @Result. Ví dụ:Các chú thích Kết quả Struts2 có ghi đè hoặc thêm vào các giá trị được xác định trên siêu lớp không?

@Results({ 
    @Result(name=BaseAction.ERROR, location="/WEB-INF/jsp/error.jsp") 
}) 
public abstract class BaseAction extends ActionSupport implements ServletRequestAware { 
    ... 
} 

..và một lớp con

@Results({ 
    @Result(name=BaseAction.INDEX, location="/WEB-INF/jsp/reporting/index.jsp") 
}) 
public class ReportAction extends BaseAction { 
    ... 
} 

Câu hỏi của tôi là, không một thể hiện của ReportAction chỉ@Result của INDEX xác định, hay nó cũng chứa bất kỳ @Result mục được xác định trong bất kỳ nếu nó là siêu lớp. Tôi có ReportAction nhận biết vị trí được đặt cho BaseAction.ERROR ??

Xin cảm ơn, Martin

+2

Vâng, bạn đã làm đúng. 'ReportAction' sẽ chứa cả hai kết quả' ERROR' và 'INDEX'. Bạn có thể xem xét ** [Câu trả lời này] (http://stackoverflow.com/questions/6765810/struts2-convention-plugin-results-using-inheritance/6770638#6770638) **. Và tại sao bạn không kiểm tra 'kết quả ánh xạ' bởi ** [Config Browser Plugin] (http://struts.apache.org/2.2.3.1/docs/config-browser-plugin.html) **. – lschin

Trả lời

1

Có, lớp ReportAction của bạn sẽ có cả BaseAction.INDEX và BaseAction.ERROR.

Quy tắc chung cấp siêu hoặc phân lớp phụ sẽ áp dụng trong trường hợp này. Nếu bạn không tìm thấy một cái gì đó trong lớp con của bạn, nó sẽ đi và nhìn vào lớp siêu.

Trong trường hợp của bạn BaseAction.ERROR không tìm thấy trong lớp con của bạn, nó sẽ đi và nhìn vào siêu lớp.

0

Nó sẽ có cả hai. Bạn có thể xác minh bằng plugin trình duyệt cấu hình.

0

Nó sẽ có thể xác định cả BaseAction.INDEX và BaseAction.ERROR.

Nếu kết quả có sẵn trong lớp con (Trong trường hợp lớp ReportAction của bạn) nó sẽ theo sau, Nếu không nó sẽ xem trong siêu lớp (Trong trường hợp bạn là lớp BaseAction).