Ajax-вызов метода в обработчике потока - Spring web flow 2.1.1 - PullRequest
1 голос
/ 20 сентября 2010

У меня проблема с выполнением вызова Ajax внутри потока (созданного пружинным веб-потоком) в обработчике потока. Предполагая, что мы находимся на шаге 2 этого потока, и я хотел бы вызвать метод на сервере, который добавит новый объект в список, отображаемый на странице. Этот вызов метода должен выполняться обработчиком потока, и без обновления весь список должен повторно отображаться на странице, и там должен появиться новый объект.

Проще говоря, я хотел бы сделать частичную передачу с вызовом метода в обработчике потока. Но сейчас я могу сделать это только с помощью отправки формы с обновлением.

Я пытался: - Spring.remoting.submitForm (...)

  • Spring.addDecoration (новый Spring.AjaxEventDecoration ({...})

  • Запрос DWR додзё ...

Мое окружение: - Spring-webflow - 2.1.1.RELEASE

  • Spring-webmvc - 3.0.3. РЕЛИЗ

  • Весна - 3.0.3. РЕЛИЗ

  • Плитка - 2.2.1

  • Скорость - 1.6.4

Я надеюсь, что кто-то может помочь с этой проблемой.

Привет

Марек Доминик

1 Ответ

1 голос
/ 11 октября 2010

Я делаю эту точную вещь, используя jQuery.

На моей главной странице, где определены плитки, у меня есть:

<script type="text/javascript" src="/path/to/jquery/jquery-1.4.2.min.js" />

Затем, в местах, где я хочувызвать фрагмент страницы, который у меня есть:

    <script type="text/javascript"><![CDATA[
      $(document).ready(function() {

          $("#addNewFragment").click(function() {
              $.get("/app/fragments/target.page",function(data){$("#addFragmentLocation").before(data);});
          });
      });
    ]]></script>

И ниже на той же странице, где я хочу, чтобы фрагмент появился, у меня есть:

<span id="addFragmentLocation" />

И у меня есть некоторый элемент с идентификатором«addNewFragment», чтобы при нажатии на него выполнялась функция jQuery.

У меня есть контроллер с именем FragmentController.java.Он принимает вид:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@RequestMapping("/fragments/**")
@Controller
public class FragmentController {

// Add request mappings as you need to.
@RequestMapping(value = "/fragments/target.page", method = RequestMethod.GET)
public String getFragment(ModelMap modelMap, HttpServletRequest request, HttpServletResponse response) {
    //Add model elements as you need to.
    return "fragmentView";
}
}

Наконец, в объявленном файле views.xml объявлено представление, которое отображает представление фрагмента обратно на фактическую страницу .jspx.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

<definition name="fragmentView" template="/WEB-INF/path/to/fragments/myNewPageFragment.jspx" />

</tiles-definitions>

Кроме того, страницы jspx, естественно, основаны на XML.JQuery не может вставить XML в DOM на основе HTML.Убедитесь, что вы начинаете их с:

 <div xmlns:jsp="http://java.sun.com/JSP/Page" >
      <jsp:output omit-xml-declaration="yes"/>
      <jsp:directive.page contentType="text/html; charset=ISO-8859-1" />

В противном случае вы получите загадочную ошибку JavaScript:

Ошибка: необработанное исключение: [Исключение ... ”Узел не может быть вставлен вуказанная точка в иерархии "code:" 3 "nsresult:" 0x80530003 (NS_ERROR_DOM_HIERARCHY_REQUEST_ERR) "location:" http://127.0.0.1:8080/path/to/jquery/jquery-1.4.2.min.js Строка: 113 "]

Надеюсь, это поможет!

...