2009-02-26 34 views
53

Tôi cần xây dựng một ứng dụng GWT sẽ được gọi bởi một ứng dụng bên ngoài với các tham số URL cụ thể.GWT: Chụp các tham số URL trong yêu cầu GET

Ví dụ:

http://www.somehost.com/com.app.client.Order.html?orderId=99999.

Làm cách nào để nắm bắt thông số orderId bên trong ứng dụng GWT?

+0

Tôi đang làm việc trên một vấn đề tương tự, làm cách nào để ứng dụng trả lời thông số như, orderID = 99999? Tôi có nghĩa là nó xử lý các tham số như thế nào? – xybrek

+0

@xybrek Nếu bạn không xem xét [Cơ chế lịch sử] được cung cấp (http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsHistory.html) trong GWT (sử dụng # để tránh tải lại trang), bạn sẽ cần đặt một phương thức trong điểm vào chính của bạn, được gọi trong phương thức 'onLoad()' của điểm vào chính.Mỗi lần trang được gọi nó sẽ gọi phương thức chuyên dụng của bạn, trong đó bạn có thể kiểm tra và xử lý các tham số đã cho. – Dennis

Trả lời

83

Hãy thử,

String value = com.google.gwt.user.client.Window.Location.getParameter("orderId"); 
// parse the value to int 

T.B. GWT có thể gọi javascript gốc có nghĩa là nếu javascript có thể thực hiện công cụ, GWT cũng có thể thực hiện; ví dụ. trong GWT, bạn có thể viết

public static native void alert(String msg) 
/*-{ 
$wnd.alert("Hey I am javascript"); 
}-*/; 

Trong trường hợp này, bạn thậm chí có thể sử dụng lib javascript hiện có để trích xuất giá trị của thông số trong chuỗi truy vấn.

+1

@codemeit, nơi đặt mã này vào mã gwt? Trong điểm vào chính? Ví dụ: tôi có http://mygwtapp.com/process.html?query=123 sẽ được một số ứng dụng web khác gọi hoặc chỉ viết bằng tay trên thanh trình duyệt. – xybrek

+0

phải là ** S ** tring, phải không? –

19

GWT có một cơ sở để có được params từ URL:

String value = Window.Location.getParameter("param"); 

Hãy chắc chắn rằng URL của bạn là theo hình thức:

http://app.com/?param=value#place thay vì http://app.com/#place&param=value

Để có được tất cả các params trên bản đồ, sử dụng:

Map<String, List<String>> map = Window.Location.getParameterMap(); 
+1

Phương thức này 'Window.Location.getParameter (" param ")' hoạt động tốt nhất cho ứng dụng GWT của tôi vì nó có thể được đặt ở mọi nơi. – hyip

0

Tôi đề xuất y để sử dụng GWT MVP. Giả sử rằng url của bạn như

http://www.myPageName/myproject.html?#orderId:99999

Và trong AppController.java bạn -

Hãy thử như

...... 
    public final void onValueChange(final ValueChangeEvent<String> event) { 
    String token = event.getValue(); 

    if (token != null) { 
     String[] tokens = History.getToken().split(":"); 
     final String token1 = tokens[0]; 
     final String token2 = tokens.length > 1 ? tokens[1] : ""; 

     if (token1.equals("orderId") && tonken2.length > 0) { 
      Long orderId = Long.parseLong(token2); 
      // another your operation 
     } 
    } 
} 
........... 

Một lựa chọn khác, bạn cũng có thể sử dụng với Spring MVC. Dưới đây là một ví dụ ...

// Below is in your view.java or presenter.java 

Window.open(GWT.getHostPageBaseURL() + "customer/order/balance.html?&orderId=99999", 
      "_self", "enable"); 

// Below code in in your serverside controller.java 

@Controller 
@RequestMapping("/customer") 
public class ServletController { 
@RequestMapping(value = "/order/balance.html", method = RequestMethod.GET) 
public void downloadAuctionWonExcel(@RequestParam(value = "orderId", required = true) final String orderId, 
    final HttpServletResponse res) throws Exception { 
    try { 
     System.out.println("Order Id is "+orderId); 
     // more of your service codes 
     } 
     catch (Exception ex) { 
     ex.printStackTrace(); 
     } 
    } 
} 
0

Bạn có thể sử dụng ActivitiesPlaces để làm điều đó. Khi bạn tạo Địa điểm cho trang của mình, bạn có thể đặt orderId làm thành viên. Thành viên này có thể được sử dụng sau khi bạn tạo ra Activity liên kết với địa điểm (trong ActivityMapper).

Hạn chế duy nhất là bạn không thể gửi orderId làm thông số bình thường. Bạn sẽ phải sử dụng url có dạng này:

127.0.0.1:60206/XUI.html?#TestPlace:orderId=1 
Các vấn đề liên quan