Предлагаемый способ кодирования пар имя / значение в Жетоне жетона места GWT Activitie - PullRequest
1 голос
/ 31 августа 2011

В GWT, используя apis History / Activities / Places, вы получите URL-адреса, подобные этому

http://192.168.0.104:8888/brokerage.html?gwt.codesvr=192.168.0.104:9997#StartPlace:params

Где слово params - это место "token", где можно передавать параметрыв объект StartPlace.Для большинства моих приложений достаточно одной строки, чтобы перезагрузить мои данные с обновленным нажатием.Однако в некоторых видах деятельности / местах / страницах мне нужно разбить этот токен на несколько пар имя / значение.

У кого-нибудь есть предложения, как с этим справиться?В настоящее время я пишу класс, который строит строку из пар имя / значение, разделяя их по URL-адресу, используя & name = value.Было бы здорово, если бы кто-нибудь знал о классе, который мог бы справиться с этим или с чем-то еще.

Ответы [ 3 ]

3 голосов
/ 01 сентября 2011

Как насчет простого копирования / вставки кода из Window.Location для анализа (закрытый метод buildListParamMap; вы также можете вызвать его с помощью JSNI - который позволяет обойти видимость Java - учитывая, что это статический метод без состояние ) и UrlBuilder.buildString для сериализации?

1 голос
/ 31 августа 2011

Это то, что я придумал, это должно работать для других.Использование хэш-карты - хорошая идея, я изменю свой код.

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 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();
}
1 голос
/ 31 августа 2011
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]);
}

....

String name1Value = parameterMap.get("name1");

Это весь непроверенный код, и он имеет непроверенные границы массивов!Убедитесь, что у вас нет посторонних знаков «&» или «=», так как они могут испортить синтаксический анализ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...