2

我的页面中有一个特定的 div,我想在其中加载所有子页面(为此我使用 JQuery)。在加载它们之前,我需要在服务器中进行一些操作,所以我调用了我的 servlet,在完成所有操作之后,我想加载 .jsp 页面......但我不知道如何。

responseText 为:

/SAJ/WebContent/WEB-INF/views/administracion/semestres/semestreIndex.jsp

(在我的项目结构中存储需要 .jsp 的路径)

我得到它在div中写responseText:

<div id="content" class="testDiv" >

使用这个:

function load() {
    $.ajax({
        type: "POST",
        url: "/SAJ/pages/semestre",
        success: function(responseText) {
            $('#content').text(responseText); 
        }
    });
}

但我不知道如何加载整个页面。我的第一个想法是这样做:

function load() {
    $.ajax({
        type: "POST",
        url: "/SAJ/pages/semestre",
        success: function(responseText) {
            $('#content').load(responseText); 
        }
    });
}

但我在 Chrome 的控制台中收到 404 错误:

GET http://localhost:8080/SAJ/WebContent/WEB-INF/views/administracion/semestres/semestreIndex.jsp 404 (Not Found)

我想比我使用错误的路线?但是我怎样才能找到哪一个是正确的呢?我只是按照我的项目结构:

项目结构

小服务程序代码:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    try {
        Action action = ((ActionFactory) getServletContext().getAttribute("actions")).getAction(request);
        String view = action.execute(request, response);
        if(view.equals("index")){
            request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);
        }else{
            response.getWriter().write("/SAJ/WebContent/WEB-INF/" + view + ".jsp");
        }
    } catch (Exception e) {
        throw new ServletException("Executing action failed.", e);
    }
}

servlet 调用的操作:

public class SemestreListarAction implements Action{

    public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception{
    request.setAttribute("test", "HELLO WORLD!");
    System.out.println("I'm nice so I did some stuff for you!");

        return "views/administracion/semestres/semestreIndex";
    }
}

web.xml

<servlet>
    <servlet-name>Redirector</servlet-name>
    <servlet-class>com.saj.controller.Redirector</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Redirector</servlet-name>
    <url-pattern>/pages/*</url-pattern>
</servlet-mapping>

呼叫者:

<a href="#" onclick="load()">Load</a>
4

3 回答 3

3

让我们承认你有这个 div :

<div id='result'></div>

尝试.load()像这样使用:

function load(jsp_path) {

    $("#result").load(jsp_path);

}
于 2013-09-14T15:33:25.347 回答
0

好吧,在终于能够加载一些东西之后,我发现因为一切都是如何配置的,唯一需要加载的是索引。为了纠正这个问题,我改变了我的逻辑。

首先,我只使用 Load 函数请求页面:

function Load() {
$.ajaxSetup({
    data: { load: '/semestre' }
});

$('#content').load("#/views/administracion/semestres/semestreIndex.jsp"); //jsp's path
}

然后更改我的 servlet(因此它重定向到 jsp 所在的正确路径)和 actionFactory 以使用参数加载而不是 request.getPathInfo()

小服务程序:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    try {
        Action action = ((ActionFactory) getServletContext().getAttribute("actions")).getAction(request);
        String view = action.execute(request, response);
        request.getRequestDispatcher("/WEB-INF/" + view + ".jsp").forward(request, response);           
    } catch (Exception e) {
        throw new ServletException("Executing action failed.", e);
    }
}

动作工厂:

public Action getAction(HttpServletRequest request) {
    Action action = actions.get(request.getParameter("load"));

    if(action == null)
        return new DefaultAction();
    else
        return action;
}

总之,问题出在路径和我的逻辑上。在我的情况下不需要使用 $ajax 和 $load,因为 $load 本身就是一个 http 请求,所以我可以执行逻辑,然后在同一个调用中加载具有正确值的页面。路径中的问题是由于缺少“#”。

我想知道是否有办法更改请求路径,以便我可以删除“加载”参数,此外现在一切正常。

于 2013-09-14T17:18:58.363 回答
0

这里的一个关键是,确保您的 jsp 不在 web-inf 目录中,将其移动到与 web-inf 相同的级别或与 web-inf 相同级别的目录中。

于 2015-07-29T14:53:37.717 回答