2010-09-20 2 views
1

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

В более простых словах я хотел бы сделать частичный submit с вызовом метода в обработчике потока. Но на данный момент я мог сделать это только с полным представлением формы с обновлением.

Я пробовал: - Spring.remoting.submitForm (...)

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

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

Моя среда: - Весна-WebFlow - 2.1.1.RELEASE

  • Спринг-webmvc - 3.0.3.RELEASE

  • Spring - 3.0.3.RELEASE

  • плитки - 2.2.1

  • Скорость - 1.6.4

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

С уважением

Marek Dominiak

ответ

1

Я делаю это точно вещь, с помощью 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" /> 

И у меня есть элемент с идентификатором "addNew Fragment ", так что, когда я нажимаю на него, функция 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 объявлен которая отображает «fragmentView» взгляд назад к фактической странице .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:

Error: uncaught exception: [Exception... "Node cannot be inserted at the specified point in the hierarchy" 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 Line: 113"]

Надеется, что это помогает!

 Смежные вопросы

  • Нет связанных вопросов^_^