Лучшая практика для параметризации приложения GWT?

У меня есть приложение Google Web Toolkit (GWT), и когда я связываюсь с ним, я хочу передать некоторые аргументы / параметры, которые оно может использовать для динамического извлечения данных. Например. если бы это было приложение биржевой диаграммы, я бы хотел, чтобы моя ссылка содержала символ, а затем приложение GWT прочитало его и сделало запрос в какую-нибудь биржевую службу. Например. http://myapp/gwt/StockChart?symbol=GOOG будет ссылкой на мой StockChart GWT app, и оно отправит запрос в мою веб-службу информации о акциях на акции GOOG.

До сих пор я использовал серверный код для добавления переменных Javascript на страницу, а затем я прочитал эти переменные с помощью JSNI (собственный интерфейс JavaScript).

Например:

В HTML-коде хоста:

<script type="text/javascript">
  var stockSymbol = '<%= request.getParameter("symbol") %>';
</script>   

В коде GWT:

public static native String getSymbol() /*-{
    return $wnd.stockSymbol;
}-*/;

(Хотя этот код основан на реальном коде, который работает, я изменил его для этого вопроса, поэтому я, возможно, где-то пошутил)

Однако это не всегда хорошо работает в режиме хоста (особенно с массивами), и поскольку JSNI не было в версии 1.4 и более ранних, я предполагаю, что есть другой / лучший способ.


gwt
person KC Baltz    schedule 23.09.2008    source источник


Ответы (2)


Если вы хотите прочитать параметры строки запроса из запроса, вы можете использовать класс com.google.gwt.user.client.Window:

// returns whole query string 
public static String getQueryString() 
{
    return Window.Location.getQueryString();
}

// returns specific parameter
public static String getQueryString(String name)
{   
    return Window.Location.getParameter(name);
}   
person Drejc    schedule 23.09.2008
comment
Это работает для запросов GET. А как насчет параметров POST? Например, если бы я хотел запросить сразу 200 символов акций, я бы не хотел, чтобы они все отображались в URL-адресе. - person KC Baltz; 24.09.2008
comment
Я бы предложил создать виджет, который действует по какому-то параметру. Вы, конечно, не хотите создавать свою страницу с помощью POST / GET, строить ее на основе отправки XML на страницу (RPC) и анализировать на клиенте для создания всех виджетов. Затем виджеты индивидуально вызывают сервер, чтобы отобразить данные. - person Drejc; 24.09.2008
comment
PS: Вы должны привыкнуть к асинхронному (AJAX) способу работы GWT (RPC). GET и POST следует использовать только для того, чтобы повлиять на какое-то глобальное поведение (например, выбор языка), поскольку он перезагружает всю страницу. - person Drejc; 24.09.2008
comment
Это действительно проблема с загрузкой. После загрузки приложения я использую либо GWT RPC, либо HTTP-запросы, если они недоступны. Этот вопрос был мотивирован моим текущим проектом, который представляет собой приложение для отображения элементов на основе выбора пользователя. Благодаря большому выбору товаров, POST идеально подходит. - person KC Baltz; 25.09.2008
comment
Да, это хорошее решение, особенно если вы хотите иметь HTML-версию для facebook, G + или поискового робота Google, чтобы получать информацию, и вы хотите, чтобы пользователь переходил на настоящую страницу GWT, когда нажимает на ссылку. Кстати, а как определить, что это facebook, или пользователь, который хочет увидеть ссылку? Я хотел бы использовать информацию пользовательского агента, но это означает, что мне придется указать все возможные значения браузеров и игнорировать поисковые роботы, которых я не понимаю? ... - person Zied Hamdi; 25.11.2013

Это также хороший вариант «параметризовать» приложение GWT с помощью хеш-значений.

Итак, вместо

 http://myapp/gwt/StockChart?symbol=GOOG

использовать

 http://myapp/gwt/StockChart#symbol=GOOG

Для таких «параметров» есть хороший инструмент, поддерживающий механизм истории GWT. .

person mxro    schedule 23.08.2012
comment
Вы не можете отправить хешированный URL-адрес через перенаправление - person Zied Hamdi; 25.11.2013