1

History/Activities/Places API を使用する GWT では、次のような URL になります。

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

params という単語は、パラメータを StartPlace オブジェクトに渡すことができる場所「トークン」です。私のアプリケーションのほとんどでは、更新を押してデータをリロードするには、単一の文字列で十分です。ただし、いくつかのアクティビティ/場所/ページでは、その場所のトークンをいくつかの名前/値のペアに分割する必要があります。

これを処理する方法について誰か提案がありますか? 現在、&name=value を使用して URL 形式でそれらを分離することにより、名前と値のペアから文字列を作成するクラスを作成しています。誰かがこれまたは何かを処理できるクラスを知っていれば、それは素晴らしいことです。

4

3 に答える 3

3

Window.Location解析 (プライベート メソッド。状態buildListParamMapのない静的メソッドであるため、Java の可視性をバイパスできる JSNI を使用して呼び出すこともできます) とシリアライゼーションのためにコードを単純にコピー/貼り付けするのはどうですか?UrlBuilder.buildString

于 2011-09-01T16:30:34.087 に答える
1
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");

これはすべてテストされていないコードであり、配列の境界がチェックされていません。構文解析を台無しにするので、無関係な「&」または「=」記号がないことを確認してください。

于 2011-08-31T17:17:21.607 に答える
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 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();
}
于 2011-08-31T17:40:37.727 に答える