Ajax调用流处理程序中的方法 - Spring Web flow 2.1.1

时间:2010-09-20 09:08:29

标签: ajax spring renderpartial spring-webflow-2

我在流程处理程序中执行流内部(由Spring Web流程创建)执行Ajax调用时遇到问题。假设我们处于此流程的第2步,并且我想在服务器上调用一个方法,该方法将新对象添加到页面上显示的列表中。此方法调用应由流处理程序执行,如果没有刷新,则应在页面上重新显示整个列表,并在那里显示新对象。

简单来说,我想通过调用流处理程序中的方法来进行部分提交。 但是现在我只能通过刷新表单的整个提交来做到这一点。

我试过了: - Spring.remoting.submitForm(...)

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

  • DWR道场请求......

我的环境: - Spring-webflow - 2.1.1.RELEASE

  • Spring-webmvc - 3.0.3.RELEASE

  • Spring - 3.0.3.RELEASE

  • Tiles - 2.2.1

  • Velocity - 1.6.4

我希望有人可以帮助解决这个问题。

此致

Marek Dominiak

1 个答案:

答案 0 :(得分: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" />

我有一些ID为“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文件中声明了一个视图,它将“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插入基于HTML的DOM中。请务必使用以下命令启动它们:

 <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错误:

  

错误:未捕获异常:[例外...“节点无法插入层次结构中的指定点”代码:“3”nsresult:“0x80530003(NS_ERROR_DOM_HIERARCHY_REQUEST_ERR)”位置:“http://127.0.0.1: 8080 / path / to / jquery / jquery-1.4.2.min.js Line:113“]

希望这有帮助!