0

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 回装飾します。

だから私はあなたに尋ねます...なぜこの問題なのですか?これを回避する解決策はありますか?

前もって感謝します

4

0 に答える 0