2013-05-21 39 views
5

Tôi có URL: http://demo.lendingclub.com/account/summary.action. Khi truy cập url này, nó sẽ lần đầu tiên đi đến xác thực đánh chặn, trong lớp đánh chặn, Nếu tôi sử dụng:Cách nhận url hành động trong jsp bằng Struts 2

String uri = req.getRequestURI(); 

nó sẽ trở lại /account/summary.action

Nhưng nếu tôi sử dụng nó trong jsp :

<% 
    HttpServletRequest req = ServletActionContext.getRequest(); 
    String uri = req.getRequestURI(); 
%> 

nó sẽ trở lại: /mainapp/pages/account/summary.jsp

Tại sao chúng khác nhau và làm thế nào tôi có thể nhận URL hành động trong JSP?

+0

Có một giải pháp: 'String namespace = ServletActionContext.getActionMapping(). GetNamespace(); \t \t \t Hành động chuỗi = ServletActionContext.getActionMapping(). GetName(); \t \t \t uri = không gian tên + "/" + action + ".action"; Nhưng tôi nghĩ nó quá phức tạp !! –

+0

'' - http://stackoverflow.com/q/15755583/1700321 –

+0

@AleksandrM tốt nhưng vẫn có thể ngắn hơn;) – Quaternion

Trả lời

2

Bạn có thể nhận được URL hành động hoặc bất kỳ giá trị nào khác nếu bạn đặt thuộc tính cho hành động và sau đó truy xuất thuộc tính đó từ ngăn xếp giá trị qua OGNL.

private String actionURL; 

public String getActionURL(){ 
    return actionURL; 
} 

mã để tính toán URL hành động tương tự như bạn được đưa lên các ý kiến ​​

public String getPath(){ 
    ActionProxy proxy = ActionContext.getContext().getActionInvocation().getProxy(); 
    String namespace = proxy.getNamespace(); 
    String name = proxy.getActionName(); 
    return namespace+(name == null || name.equals("/") ?"":("/"+name)); 
} 

mã này không được hỗ trợ .action gia hạn, nếu bạn cần phải thêm phần mở rộng của con đường thì bạn cần phải sửa đổi mã này tương ứng.

sau đó viết phương pháp hành động của bạn

public String excute() { 
    actionURL = getPath(); 
    ... 
    return SUCCESS; 
} 

trong JSP

<s:property value="%{actionURL}"/> 

bạn đã được sử dụng kết quả điều phối để chuyển tiếp yêu cầu đến JSP kết quả là bạn nhận được URI chỉ đến vị trí JSP .

5

Cách dễ nhất để nhận url hành động hiện tại là: <s:url/> nếu bạn cung cấp tham số không gian tên và hành động, bạn có thể thực hiện tại các hành động khác nhưng không có tham số này mặc định là url hiện tại.

+0

ngắn và ngọt ngào! :) –

Các vấn đề liên quan