2010-09-20 27 views
1

J'ai un problème avec l'exécution de l'appel Ajax à l'intérieur du flux (créé par le flux web de printemps) sur un gestionnaire de flux. En supposant que nous sommes à l'étape 2 de ce flux et que je voudrais appeler une méthode sur le serveur qui va ajouter un nouvel objet à une liste affichée sur une page. Cet appel de méthode doit être effectué par un gestionnaire de flux et, sans actualisation, la liste entière doit être réaffichée sur une page et un nouvel objet doit y apparaître.Ajax appel à une méthode dans le gestionnaire de flux - Flux Web de printemps 2.1.1

En termes plus simples, je voudrais faire une soumission partielle avec appel à une méthode dans le gestionnaire de flux. Mais pour l'instant je ne pourrais le faire qu'avec le formulaire entier avec un rafraîchissement.

J'ai essayé: - Spring.remoting.submitForm (...)

  • Spring.addDecoration (nouvelle Spring.AjaxEventDecoration ({...})

  • DWR demande de dojo ...

Mon environnement: - printemps-webflow - 2.1.1.RELEASE

  • Printemps-webmvc - 3.0.3.RELEASE

  • printemps - 3.0.3.RELEASE

  • Carreaux - 2.2.1

  • Velocity - 1.6.4

J'espère que quelqu'un peut aider avec ce problème.

Cordialement

Marek Dominiak

Répondre

1

Je fais cette chose exacte à l'aide jQuery.

Dans ma page principale où les tuiles sont définies, j'ai:

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

Puis, dans les endroits où je veux appeler un fragment de page J'ai:

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

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

et inférieur la même page où je veux que le fragment apparaisse, j'ai:

<span id="addFragmentLocation" /> 

Et j'ai un élément avec un ID de "addNew" Fragment "de sorte que lorsque je clique dessus, la fonction jQuery s'exécute.

J'ai un contrôleur appelé FragmentController.java. Il prend la forme de:

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"; 
} 
} 

Enfin, j'ai vue dans le fichier views.xml déclaré qui mappe la vue « fragmentView » retour à une page française.jspx réelle.

<?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> 

En outre, les pages jspx sont naturellement basées sur XML. jQuery ne peut pas insérer XML dans un DOM basé sur HTML. Assurez-vous de les commencer:

<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" /> 

Sinon, vous obtenez une mystérieuse erreur 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"]

Hope this helps!