【问题标题】:spring MVC + jsf + jquery春天MVC + jsf + jquery
【发布时间】:2013-08-08 08:57:03
【问题描述】:

我正在尝试将 spring mvc 与 jsf 和 jquery 集成。

该页面仅显示硬编码文本,尽管执行了 3 秒计时器并重新渲染了页面,但是随后内存使用量激增,一切都开始崩溃。 这是一个示例页面,其中应该每 3 秒生成一个随机数

文件夹结构

-Web Content
   - index.xhtml
   - template.xhtml
   - rest
      - welcome.xhtml
   -WEB-INF
      - web.xml
      - testServlet-servlet.xml
      - faces-config.xml
      - lib
         - *all libraries*
-Java Resources 
   -src
      - com
         -controller
            -HelloWorld.java    

Template.xhtml

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
    <title><ui:insert name="title">Default Title</ui:insert></title>
    <link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' 
        rel='stylesheet' type='text/css' />

</h:head>

<h:body>
    <div >
        <ui:insert name="content" />
    </div>
 </h:body>

Welcome.xhtml

<ui:composition template="../template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:a4j="http://richfaces.org/a4j">

<ui:define name="title">
    Sample Page
    </ui:define>


<ui:define name="content">
    <script type="text/javascript"
        src="http://code.jquery.com/jquery-1.10.1.min.js" />
    <script type="text/javascript">
        function ajaxFunction() {
            $.ajax({
                url : 'welcome.xhtml',
                success : function(data) {
                    $('#result').html(data);
                }
            });
        }
    </script>
    <script type="text/javascript">
        var intervalId = 0;
        intervalId = setInterval(ajaxFunction, 3000);
    </script>

    ${message} 
    SUCCESS:
    <p id="result"></p>
</ui:define>

控制器

@Controller
@RequestMapping("rest/welcome")
public class HelloWorld
{
    @RequestMapping("rest/welcome")
public ModelAndView ajaxTest()
    {
        return new ModelAndView("rest/welcome", "message",
                "This is a test message");
    }

    @RequestMapping(value = "rest/welcome", method = RequestMethod.GET)
    public @ResponseBody
    String getTime()
    {
        Random rand = new Random();
        float r = rand.nextFloat() * 100;
        String result = "<br>Next Random # is <b>" + r
                + "</b>. Generated on <b>" + new Date().toString() + "</b>";
        System.out.println("Debug Message from Controller.."
                + new Date().toString());
        return result;
    }
}

Web.xml sn-p

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>testServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>testServlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/testServlet-servlet.xml</param-value>
</context-param>

testSevlet-servlet.xml 内容

     <context:component-scan
    base-package="com.controller" />

<mvc:annotation-driven />

【问题讨论】:

    标签: jquery spring-mvc jsf-2


    【解决方案1】:

    welcome.xhtml 中的问题是 您正在触发 ajax 以获得相同的页面,即welcome.xhtml

    $.ajax({
                    url : 'welcome.xhtml',
                    success : function(data) {
                        $('#result').html(data);
                    }
                });
    

    url :'welcome.xhtml' 更改为 url :'welcome' 以解决您的问题(假设您想将 ajax 发送到 rest/welcome

    您还在控制器级别和方法级别上放置了相同的请求映射(休息/欢迎)。我不确定您的设计,但您可以从其中一个中删除映射

    所以改变

    @RequestMapping("rest/welcome")
    public class HelloWorld
    

    //RequestMapping("rest/welcome") note i have commented this
    public class HelloWorld
    

    【讨论】:

    • 我在页面和控制台中没有得到任何更改://// 进入 JSF 阶段:RESTORE_VIEW(1)//// 进入 JSF 阶段:RENDER_RESPONSE(6)////名称为“testServlet”的 DispatcherServlet 处理 [/SpingMVCTestProject/rest/rest/welcome] 的 GET 请求//// 查找路径 /rest/welcome 的处理程序方法//// 未找到 [/rest/welcome] 的处理程序方法//// 在名称为“testServlet”的 DispatcherServlet 中找不到带有 URI 的 HTTP 请求的映射 ////[/SpingMVCTestProject/rest/rest/welcome]//// 成功完成请求
    • 什么也没发生,控制台在进入 JSF 阶段后没有输出任何东西:RENDER_REPSONSE(6)。
    • 你得到与 url:'welcome' 相同的结果吗?...你需要输入正确的 url,它将映射到你的控制器中的 rest/welcome 处理程序
    • with url:welcome 我得到了和以前一样的结果,不同之处在于控制台中的输出改变了路径://// DispatcherServlet with name 'testServlet' processing GET request for [/SpingMVCTestProject/rest/ Welcome] //// 查找路径 /welcome 的处理程序方法 //// 未找到 [/welcome] 的处理程序方法 //// 在 DispatcherServlet 中找不到带有 URI [/SpingMVCTestProject/rest/welcome] 的 HTTP 请求的映射名称为“testServlet”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 2014-02-25
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多