在GWT Activitie的位置标记的标记中编码名称/值对的建议方法

在GWT Activitie的位置标记的标记中编码名称/值对的建议方法,gwt,gwt-mvp,gwt-activities,Gwt,Gwt Mvp,Gwt Activities,在GWT中,使用History/Activities/Places API,最终会得到如下URL :params 其中,单词params是可以将参数传递到StartPlace对象的位置标记。对于我的大多数应用程序,只要按一个字符串就足以重新加载刷新后的数据。但是,在一些活动/位置/页面上,我需要将该位置标记拆分为多个名称/值对 有人对如何处理这件事有什么建议吗?我目前正在编写一个类,该类通过使用&name=value以url方式将名称/值对分隔开来,从而构建出一个字符串。如果有人知道一个类可以处

在GWT中,使用History/Activities/Places API,最终会得到如下URL

:params

其中,单词params是可以将参数传递到StartPlace对象的位置标记。对于我的大多数应用程序,只要按一个字符串就足以重新加载刷新后的数据。但是,在一些活动/位置/页面上,我需要将该位置标记拆分为多个名称/值对

有人对如何处理这件事有什么建议吗?我目前正在编写一个类,该类通过使用&name=value以url方式将名称/值对分隔开来,从而构建出一个字符串。如果有人知道一个类可以处理这个或其他事情,那就太好了

String parameters="name1=value1&name2=value2&name3=value3";

HashMap<String, String> parameterMap = new HashMap<String, String>();

String[] parameterPairs = parameters.split("&");

for (int i = 0; i < parameterPairs.length; i++) {
    String[] nameAndValue = parameterPairs[i].split("=");
    parameterMap.put(nameAndValue[0], nameAndValue[1]);
}
这是所有未经测试的代码,它具有未检查的数组边界!确保没有多余的“&”或“=”符号,因为它们会扰乱解析过程


这是所有未经测试的代码,它具有未检查的数组边界!确保没有多余的“&”或“=”符号,因为它们会扰乱解析过程。

这是我想到的,应该对其他人有用。使用哈希映射是个好主意,我将修改我的代码

public static String parseNamedParam(String name, String token) {
    if (name == null || "".equals(name) || token == null || "".equals(token)) {
        return null;
    }
    final String[] strNameValuePairs = token.split("&");
    for (String entry : strNameValuePairs) {
        final String[] strNameValuePair = entry.split("=");
        final String decodedName = URL.decodeQueryString(strNameValuePair[0]);
        if (decodedName.equals(name)) {
            return URL.decodeQueryString(strNameValuePair[1]);
        }
    }
    return "";
}


这是我想到的,应该对其他人有用。使用哈希映射是个好主意,我将修改我的代码

public static String parseNamedParam(String name, String token) {
    if (name == null || "".equals(name) || token == null || "".equals(token)) {
        return null;
    }
    final String[] strNameValuePairs = token.split("&");
    for (String entry : strNameValuePairs) {
        final String[] strNameValuePair = entry.split("=");
        final String decodedName = URL.decodeQueryString(strNameValuePair[0]);
        if (decodedName.equals(name)) {
            return URL.decodeQueryString(strNameValuePair[1]);
        }
    }
    return "";
}


简单地从Window.Location复制/粘贴代码,解析私有方法buildListParamMap;您也可以使用JSNI调用它——它允许绕过Java可见性——因为它是一个没有状态的静态方法,而UrlBuilder.buildString用于序列化?

简单地从窗口复制/粘贴代码如何。解析私有方法buildListParamMap的位置;您还可以使用JSNI调用它,JSNI允许绕过Java可见性,因为它是一个没有状态的静态方法,而UrlBuilder.buildString用于序列化?

注意格式错误的URL-名称、名称和名称将使解析器崩溃。注意格式错误的URL-名称、名称和名称将使解析器崩溃。
public static String generateTokenString(List<TokenParam> tokenParams) {
    if (tokenParams == null || tokenParams.isEmpty()) {
        return "";
    }
    final StringBuilder sb = new StringBuilder();
    for (int i = 0; i < tokenParams.size(); i++) {
        final TokenParam tokenParam = tokenParams.get(i);
        final String nameEncoded = URL.encodeQueryString(tokenParam.getName());
        final String valueEncoded = URL.encodeQueryString(tokenParam.getValue());
        if (i != 0) {
            sb.append("&");
        }
        sb.append(nameEncoded);
        sb.append("=");
        sb.append(valueEncoded);
    }
    return sb.toString();
}