IBM®
Перейти к тексту
    в России и странах СНГ [изменить]    Условия использования
 
 
   
    Главная страница    Продукты    Услуги и решения    Поддержка и загрузка    Мой профиль    
Перейти к тексту

developerWorks Россия  >  SOA и Web-сервисы  >

Использование Ajax c WSRF::Lite

Управление WSRF::Lite WS-Resources с использованием Ajax

developerWorks
На предыдущую страницуСтраница 8 из 12 На предыдущую страницу

Опции документа

Обсудить


Выскажите мнение об этом учебном пособии

Помогите нам улучшить содержание


Ajax в WSRF::Lite: Изменение ResourceProperties ресурса WS-Resource с Web-страницы

В предыдущем разделе вы узнали, как обновить Web-страницу путем обновления ResourceProperties ресурса WS-Resource с использованием JavaScript и HTTP GET-запроса. Теперь вы узнаете, как изменить ResourceProperties WS-Resource-счетчика из Web-браузера. На этот раз HTML-форма используется не для отображения значения, а для ввода данных пользователем. Вместо передачи данных HTML-формы с использованием традиционного кодирования HTML-форм и запросов HTTP POST или GET, используется Ajax для создания и отправки запроса HTTP PUT с полезной нагрузкой в XML-формате.

Поддержка HTTP PUT и DELETE

Отображением HTTP-методов на WSRF-операции в WSRF::Lite являются: HTTP PUT на PutResourcePropertyDocument и HTTP DELETE на Destroy. К сожалению, в большинстве Web-браузеров нет встроенной поддержки HTTP PUT или HTTP DELETE, аналогичной поддержке GET и POST для HTML-форм. Однако при помощи объекта XMLHttpRequest можно использовать эти HTTP-методы в Web-браузерах, поддерживающих XMLHttpRequest. XMLHttpRequest также обеспечивает лучший контроль над форматом данных, отправляемых в теле запроса. Как показано в листинге 13, можно создать полезную нагрузку в XML-формате и передать ее в WS-Resource, используя HTTP PUT.

Функция updateResourceProperties, приведенная в листинге 13, передает HTTP PUT-запрос в WS-Resource для изменения одного или более свойств ResourceProperties ресурса WS-Resource. Ответное сообщение содержит документ ResourcePropertyDocument ресурса WS-Resource - такой же ответ, как и для HTTP GET-запроса. Это означает, что обработчик ответа в функции updateResourceProperties может быть таким же, как и в функции reloadResourcePropertiesDocument, о чем говорилось в предыдущем разделе.


Листинг 13. Общая функция для обновления свойств ResourceProperties в WS-Resource с использованием технологии Ajax
                    
function updateResourceProperties(xmlContent)
{
  // Создает новый объект XMLHttpRequest (или эквивалент).
  var req = newXMLHttpRequest();
  
  // Вызывает функцию-обработчик для обратной связи с пользователем. 
  indicateActive();

  // Определяет функцию обратного вызова для асинхронного HTTP-запроса.
  // Эта функция вызывается несколько раз с различными значениями  readyState
  // во время асинхронной обработки запроса объектом 
  // XMLHttpRequest.
  req.onreadystatechange = function()
  { 
     if(req.readyState == 4)
     {
        // Когда код состояния равен 200 (OK), запрос выполнился успешно.
        if(req.status == 200)
        {
           var respDocElem = req.responseXML.documentElement;
           // Вызывает функцию-обработчик для обновления страницы.
           updatePageFromResourcePropertiesDocument(respDocElem);
        }	
        else	
        {
           // Вызывает функцию-обработчик для индикации возникновения ошибки.
           updatePageAfterError("Error: returned status code " + req.status
                                          + " " + req.statusText);
        }
        // Вызывает функцию-обработчик для завершения ответной реакции.
        indicateIdle();
     } 
  }; 

  // Подготавливает тело запроса
  var newValues = "<?xml version='1.0' encoding='ISO-8859-1'?>\n"
        + '<wsrp:ResourceProperties xmlns:wsrp="'+wsrpNS+'">'
        + xmlContent
        + '</wsrp:ResourceProperties>';

  // Устанавливает тип запроса: асинхронный ("true") PUT на window.location.href
  req.open("PUT", window.location.href, true); 
  req.setRequestHeader("Content-Type", "text/xml");
  
  // Выполняет запрос, используя содержимое newValues в теле сообщения.
  req.send(newValues); 

  return false;
}

Функцию updateResourceProperties можно использовать повторно для других типов WS-Resources в WSRF::Lite. Она полагается на три функции-обработчика, являющиеся такими же, как и в функции reloadResourcePropertiesDocument. Эти функции можно настроить для конкретного типа WS-Resource:

  • updatePageFromResourcePropertiesDocument(respDocElement)
  • indicateActive()
  • indicateIdle()

Функция updateResourceProperties принимает аргумент xmlContent, который является строкой, содержащей последовательность XML-элементов для установки их как дочерних элементов в элементе ResourceProperties PUT-запроса. Эту строку можно сгенерировать, читая значения из HTML-формы.

Обновление счетчика

Значения ResourceProperty являются чем-то таким, что можно выразить на XML, и они зависят от типа WS-Resource. В примере WS-Resource-счетчика ResourceProperty count имеет тип integer, поэтому только одно значение должно читаться из поля input в HTML-форме. Можно создать более сложные типы элементов, считывая значения из более сложных HTML-форм.

Функция updateResourcePropertiesFromPage, показанная в листинге 14, предоставляет пример того, как создать дочерние XML-элементы, требующиеся для updateResourceProperties. В данном примере значение элемента mmk:count устанавливается путем чтения атрибута value input-элемента count в HTML-документ. TerminationTime обрабатывается аналогично.


Листинг 14. Пример кода для обновления WS-Resource из значений на Web-странице
                    
function updateResourcePropertiesFromPage()
{
   // Извлекает значения count и TerminationTime из элементов формы
   // и помещает их в XML-формат.
   var xmlContent =
        '<mmk:count xmlns:mmk="'+mmkNS+'">' 
      + document.getElementById('count').value + '</mmk:count>'
      + '<wsrl:TerminationTime xmlns:wsrl="'+wsrlNS+'">' 
      + document.getElementById('TerminationTime').value 
      + '</wsrl:TerminationTime>';

   // Вызывает общую функцию для обновления ResourceProperties с использованием данного
   // содержимого.
   updateResourceProperties(xmlContent);
}

Попробуйте изменить функцию так, чтобы использовалось случайное значение count путем замены определения элемента mmk:count в листинге 14 на:

'<mmk:count xmlns:mmk="'+mmkNS+'">' + Math.floor(10000*Math.random()) + 
    '</mmk:count>'



В начало


Уничтожение счетчика

Ajax-интерфейс для примера WS-Resource-счетчика, предоставляемого с WSRF::Lite, не реализует средства для уничтожения ресурса, иначе как путем изменения времени его завершения. В данном разделе вы реализуете кнопку, уничтожающую счетчик немедленно. Прежде всего, добавьте функцию destroyResource, показанную в листинге 15, в файл Counter.js. Эта функция передает запрос HTTP DELETE ресурсу WS-Resource.


Листинг 15. Пример функции destroyResource()
                    
function destroyResource()
{ 

  // Создает новый объект XMLHttpRequest (или его эквивалент).
  var req = newXMLHttpRequest();
  
  // Вызывает функцию-обработчик для обратной связи с пользователем. 
  indicateActive();

  // Определяет функцию обратного вызова для асинхронного HTTP-запроса.
  // Эта функция вызывается несколько раз с различными значениями  readyState
  // во время асинхронной обработки запроса объектом 
  // XMLHttpRequest.
  req.onreadystatechange = function()
  { 
     if(req.readyState == 4)
     {
        // Когда код состояния равен 200 (OK), запрос выполнился успешно.
        if(req.status != 200)
        {
           // Вызывает функцию-обработчик для индикации возникновения ошибки.
           updatePageAfterError("Error: returned status code " + req.status
                                          + " " + req.statusText);
        }
        // Вызывает функцию-обработчик для завершения ответной реакции.
        indicateIdle();
     } 
  }; 

  // Устанавливает тип запроса: асинхронный ("true") DELETE на window.location.href
  req.open("DELETE", window.location.href, true);
  
  // Выполняет запрос.
  req.send(null); 
}

Теперь нужно добавить кнопку в Web-страницу для активизации функции deleteResource. Это делается в XSLT-файле таблицы стилей Counter.xsl. Например, в листинге 16 в HTML-таблицу была добавлена дополнительная строка для этой кнопки.


Листинг 16. Добавление кнопки в XSLT-файл таблицы стилей для уничтожения WS-Resource
                    
..................
   <tr>
      <td colspan="2" align="center" id="destroyResource" class="idle">
         <input type="button" value="Destroy the resource" 
                   onclick="javascript: return destroyResource();" />
      </td>
   </tr>
..................



В начало



На предыдущую страницуСтраница 8 из 12 На предыдущую страницу

    IBM в России Конфиденциальность Контакты