Предлагаемый способ кодирования пар имя / значение в Жетоне жетона места GWT Activitie
В GWT, используя apis History/Activities/Places apis, вы получите URL, подобные этому
http://192.168.0.104:8888/brokerage.html?gwt.codesvr=192.168.0.104:9997:params
Где слово params - это место "токен", где параметры могут быть переданы в объект StartPlace. Для большинства моих приложений достаточно одной строки, чтобы перезагрузить мои данные с обновленным нажатием. Однако в некоторых видах деятельности / местах / страницах мне нужно разбить этот токен на несколько пар имя / значение.
У кого-нибудь есть предложения, как с этим справиться? В настоящее время я пишу класс, который строит строку из пар имя / значение, разделяя их по URL-адресу, используя &name=value. Было бы замечательно, если бы кто-нибудь знал о классе, который мог бы справиться с этим или с чем-то еще.
3 ответа
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");
Это весь непроверенный код, и он имеет непроверенные границы массивов! Убедитесь, что у вас нет посторонних знаков "&" или "=", так как они могут испортить синтаксический анализ.
Как насчет просто скопировать / вставить код из Window.Location
для разбора (приватный метод buildListParamMap
; вы также можете вызвать его с помощью JSNI - который позволяет обойти видимость Java - учитывая, что это статический метод без состояния), и UrlBuilder.buildString
для сериализации?
Это то, что я придумал, это должно работать для других. Хорошая идея - использовать хеш-карту, я изменю свой код.
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();
}