我使用 sitemesh 和 struts2 框架构建了一个简单的 Web 应用程序。现在我在 jsp 中使用 ajax 回调获得正确响应时遇到了一些问题。我在另一个 Web 应用程序中成功使用了相同的过程,但是使用了带有 struts 1 的图块。
我试图解释这个问题。我有一个jsp(用一个名为“basic-theme.jsp”的模板中的sitemesh装饰,带有一个decorator:title和一个decorator:body标签)。该页面有一个输入按钮,它调用一个 jQuery.ajax 发布函数:
function checkRicevuta(){
var params = "actionToDo=checkRicevuta&idRicevuta="+$("#idRicevuta").val();
$.ajax({
type: "POST",
url: "addettoReclami",
data: params,
success: function(response){
$("#checkRicevuta-box").append(response);
}
});
}
url 正确调用了正在处理“参数”的 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 中,我将排除模式设置为不处理“响应 jsp”所在的 /fragment/* 路径:
<?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>
我说,对tiles和struts1使用相同的过程,问题不会发生。可能我错了,但我认为这是因为响应附加在“调用者 jsp”内,因此 sitemesh 两次装饰页面,一次用于调用者 jsp 的正文,另一次用于调用者 jsp 正文中的片段。
所以我问你......为什么会出现这个问题?有没有办法避免这种情况?
提前致谢