使用sitemesh和struts2在回调中使用错误的ajax响应

时间:2012-08-20 21:43:24

标签: ajax struts2 callback response sitemesh

我使用sitemesh和struts2框架构建了一个简单的Web应用程序。现在我遇到一些问题,在jsp中使用ajax回调获得正确的响应。我在另一个Web应用程序中成功使用相同的进程,但使用带有struts 1的tile。

我试着解释这个问题。 我有一个jsp(用名为“basic-theme.jsp”的模板中的sitemesh装饰,带有装饰器:标题和装饰器:body标签)。 该页面有一个输入按钮,它调用jQuery.ajax post函数:

function checkRicevuta(){
    var params = "actionToDo=checkRicevuta&idRicevuta="+$("#idRicevuta").val();
    $.ajax({
         type: "POST",
         url: "addettoReclami",
         data: params,
         success: function(response){
                    $("#checkRicevuta-box").append(response);
                  }
    });
}

url正在调用正在处理'params'的ActionSupport类:

if(request.getParameter("actionToDo")!=null && request.getParameter("actionToDo").equals("checkRicevuta")){
        logger.info("Avvio procedura di verifica ricevuta fiscale");
        String idRicevuta = request.getParameter("idRicevuta");
        if(dbController.checkRicevuta(idRicevuta))
            request.setAttribute("message", "Ricevuta valida!");
        else request.setAttribute("message", "Ricevuta non valida");

        return "esitoRicevuta";

    }

'esitoRicevuta'转发到一个简单的jsp,字面上只有两行:

 <% String message = (String)request.getAttribute("message"); %>
 <p><%=message %></p> 

因为我想将这个简单的响应附加到第一个进行ajax调用的jsp的div中。 问题是响应也是由sitemesh修饰的,所以我实际上得到了一个嵌套的基本主题。 在sitemesh xml中,我将排除模式设置为不处理my / fragment / * path,其中位于“response jsp”:

<?xml version="1.0" encoding="UTF-8"?>
<decorators>
   <excludes>
      <pattern>/popup/*</pattern>
      <pattern>/fragment/*</pattern>
   </excludes>
   <decorator name="basic-theme" page="/decorators/basic-theme.jsp">
      <pattern>/*</pattern>
   </decorator>
</decorators>

我说过,使用与tile和struts1相同的过程,问题不会发生。 可能我错了,但我想这是因为响应被附加在“调用者jsp”中,因此sitemesh将页面装饰两次,一个用于调用者jsp的主体,另一个用于调用者jsp主体内的片段。

所以我问你......为什么会出现这个问题?有没有解决方案来避免这种情况?

提前致谢

0 个答案:

没有答案