sitemesh と struts2 フレームワークを使用して単純な Web アプリケーションを作成しました。今、jsp の ajax コールバックで正しい応答を得るのに問題があります。私は別のWebアプリケーションで同じプロセスを成功させていますが、ストラット1でタイルを使用しています.
私は問題を説明しようとします。私はjspを持っています(decorator:titleとdecorator:bodyタグを持つ「basic-theme.jsp」というテンプレートからsitemeshで装飾されています)。このページには、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 は、'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」は、文字通り 2 行だけで構成される単純な jsp に転送します。
<% String message = (String)request.getAttribute("message"); %>
<p><%=message %></p>
この単純な応答を、ajax 呼び出しを行った最初の jsp の div 内に追加したいからです。問題は、応答もサイトメッシュによって装飾されていることです。そのため、実質的にネストされた基本テーマを取得します。sitemesh xml で、"response 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」内に追加されているためだと思います。そのため、サイトメッシュはページを 2 回装飾します。
だから私はあなたに尋ねます...なぜこの問題なのですか?これを回避する解決策はありますか?
前もって感謝します