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!