【问题标题】:GWT: Capturing URL parameters in GET requestGWT:在 GET 请求中捕获 URL 参数
【发布时间】:2016-12-27 18:32:30
【问题描述】:

我需要构建一个 GWT 应用程序,该应用程序将由具有特定 URL 参数的外部应用程序调用。

例如:

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

如何在 GWT 应用程序中捕获 orderId 参数?

【问题讨论】:

  • 我正在处理一个类似的问题,你 gwt 应用程序如何响应 orderID=99999 之类的参数?我的意思是它如何处理这样的参数?
  • @xybrek 如果您不考虑 GWT 中提供的 History mechanism(它使用 # 来避免页面重新加载),您需要在您的主入口点放置一个方法,该方法被调用在主入口点的onLoad() 方法中。每次调用页面时,它都会调用您的专用方法,您可以在其中检查和处理给定的参数。

标签: java gwt


【解决方案1】:

试试,

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

附: GWT 可以调用原生 javascript,这意味着如果 javascript 可以做这些事情,GWT 也可以;例如在 GWT 中,你可以写

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

在这种情况下,您甚至可以使用现有的 javascript 库来提取查询字符串中的参数值。

【讨论】:

  • @codemeit,把它放在 gwt 代码的什么位置?在主要入口点?例如,我有mygwtapp.com/process.html?query=123,它将被其他网络应用程序调用,或者只是手写在浏览器栏中。
【解决方案2】:

GWT 具有从 URL 获取参数的功能:

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

确保您的网址采用以下格式:

http://app.com/?param=value#place 而不是http://app.com/#place&param=value

要获取地图中的所有参数,请使用:

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

【讨论】:

  • 这种方法 Window.Location.getParameter("param") 最适合我的 GWT 应用程序,因为它可以放置在任何地方。
【解决方案3】:

我建议你使用 GWT MVP 。 假设您的网址为

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

在你的 AppController.java --

试一试

    ......
    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
        }
    }
}
...........

另一个选项,您也可以与Spring MVC 一起使用。这是一个例子...

// 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();
        }
  }
}

【讨论】:

    【解决方案4】:

    您可以使用ActivitiesPlaces 来执行此操作。为页面创建 Place 时,可以将 orderId 设置为成员。此成员可以在您创建与地点关联的Activity 时使用(在ActivityMapper 中)。

    唯一的限制是您不能将 orderId 作为普通参数发送。您必须使用此表单的网址:

    127.0.0.1:60206/XUI.html?#TestPlace:orderId=1
    

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 1970-01-01
      • 2015-12-01
      • 2021-10-02
      • 2019-07-27
      • 1970-01-01
      • 2017-02-22
      • 2010-12-01
      • 2016-05-04
      相关资源
      最近更新 更多