2016-10-27 7 views
0

Я использую URL-адреса для перехода на разные экраны внутри своего приложения GWT. Например:GWT RPC не работает при запуске приложения из разных URL-адресов

http://127.0.0.1/home 
http://127.0.0.1/info/contact-us 
http://127.0.0.1/app/index.html 

У меня есть сервлет, который служит HTML, содержащий необходимый элемент сценария для GWT (мой GWT имя модуля «приложение»):

<script type="text/javascript" language="javascript" src="/app/app.nocache.html"> 
</script> 

Это работает большое с GWT 2.6.1. В браузере Дев инструментов это можно увидеть, что RPC вызовы сделаны моей RemoteService в http://127.0.0.1/app/rpc

Проблема заключается в том, когда я повышен до GWT 2.8, RPC вызов конечной точки моего приложения в настоящее время отличается и неправильно, в зависимости от Используемый URL. Например:

http://127.0.0.1/home   -> http://127.0.0.1/rpc 
http://127.0.0.1/info/contact-us -> http://127.0.0.1/info/rpc 
http://127.0.0.1/app/index.html -> http://127.0.0.1/app/rpc 

Для указанных выше URL-модуль всегда корректно загружается и выполняется, однако RPCs неудачу в первых двух случаях. только последний URL-адрес позволяет моему приложению делать вызовы RPC.

Конечная точка RPC может быть установлена ​​путем литья прокси-сервера на стороне клиента до ServiceDefTarget и использования setServiceEntryPoint(). В следующем порядке:

ourInstance = (MyRemoteServiceAsync)GWT.create(MyRemoteService.class); 
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) ourInstance; 
serviceDefTarget.setServiceEntryPoint("/app/rpc"); 

Однако полезная нагрузка запроса по-прежнему содержит ссылку на неправильную базу модуля. Заголовки HTTP, отправленные на запрос RPC имеют неправильные значения также:

X-GWT-Module-Base:http://127.0.0.1/foo/bar/ 

Есть ли способ заставить механизм RPC клиента использовать правильный URL RPC /app/rpc? Или, возможно, правильно установить модуль-базу?

ОБНОВЛЕНИЕ 1

Видя такое же поведение в GWT 2.7.

Кроме того, при развертывании в WAR файл <module-hash>.cache.js не загружается, так как он также запрашивается относительно URL-адреса. Это очень плохо, потому что это означает, что код модуля не будет кэшироваться, так как этот URL-адрес различен каждый раз. Фиксирование должно быть выполнено в селекторе <module>.nocache.js. Кто-нибудь на самом деле использует GWT с ссылкой на ссылку в реальном мире?

+0

Вы можете сообщить об ошибке для этого изменения разрывного поведения? –

+0

Я могу. Считаете ли вы, что это ошибка или как она была разработана? – TJez

+0

Это может быть что-то в вашем приложении, купить его не по дизайну. –

ответ

1

Указав <meta> элемент в <head> элементе HTML документа, загрузчик nocache.js селектора Javascript будет выбрать правильный модуль BaseUrl. BaseUrl должен быть полностью заданным абсолютным URL-адресом и заканчиваться /.

Для моего примера, точный элемент был:

<head> 
    ... 
    <meta name="gwt:property" content="baseUrl=http://127.0.0.1/app/" /> 
    ... 
</head>