0

私はjspページを表示していて、サーブレットに対してajax呼び出しを行っています。これにより、ページに表示される完全なhtmlコードが提供されます。正常に動作しますが、サーブレットファイルではprintWriter.write(...)、htmlコードを含む複数の行が含まれているように見えます。サーブレットを介して大きなHTMLコードを作成する必要があるため、保守が難しくなります。これを行うための他の適切な/より良い方法はありますか?サーブレットにHTML行とロジックを書き込むことができますが、それらを分離するのは困難です。

jspページでのajax呼び出し:

$.ajax({
    type: 'POST',
    url: 'myServlet',
    data: requestData,
    dataType: "text",
}).done(function(responseData) {
    $(divId).html(responseData);
});

サーブレットクラスからのいくつかのコード:

.....
String username = user.getName();
if (username != null && !username.trim().isEmpty())
    username = username.substring(0, username.indexOf(" "));
else
    username = "";
printWriter.write("<span id=\"username_"+i+"\" style=\"display: none;\">"+ username +"</span>");
printWriter.write("<form action=\"\" method=\"post\" name=\"userClickForm_"+i +"\" id=\"userClickForm_"+i +"\">");
printWriter.write(" <input type=\"hidden\" name=\"userId\" value=\""+userId +"\"/>");
printWriter.write("</form>");
......

HTMLコードとビジネスロジックを混在させる主な理由は、条件とループ構造に基づいてdividを提供する必要があるためです。

4

4 に答える 4

2

何らかの形式のテンプレートまたは変換テクノロジーを使用する必要があります。jQueryとJSPを使用しているため、これはサーバー側のJSPまたはクライアント側のjQueryテンプレートプラグインのいずれかになります。

初期のJSPMVCパターンは次の形式を取ります。

protected void doPost(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    // read inputs
    String foo = request.getParameter("foo");
    // perform business logic
    SomeResults results = new SomeDataSource().lookupDatabase(foo);
    // place results into scope
    request.setAttribute("results", results);
    // dispatch to JSP to render results
    request.getRequestDispatcher("result.jsp")
           .forward(request, response);
}

このアプローチは、AJAX呼び出しで使用できます。

または、JSONまたはXMLデータで応答し、これをJavaScriptで解析してから、JavaScriptテンプレートエンジンを使用して、JSPで実行されるロジックと同様の処理を実行することもできます。

于 2012-12-20T09:43:24.033 に答える
1

サーブレットではhtmlではなくxmlを使用し、jspではjqueryを使用したajax呼び出しのsuccess属性を使用します。私の場合は動作しますが、タイプは「GET」として使用しています。

  $.ajax({
            url: ,
            data: ,
            type: ,
            dataType: 'xml',
            async: true,
            success:function(xmlDoc) 
            {   
                var message = xmlDoc.getElementsByTagName("message");
                message = message[0].firstChild.data;

            }
    });

そしてサーブレットでの使用::

         res.getWriter().write("<response><message>abcdefg</message></response>");
于 2012-12-20T07:05:57.283 に答える
1

これは、STRUTS や SPRING などの MVC フレームワークを使用することで回避できます。

于 2012-12-20T05:18:10.127 に答える
0

JSP を使用する必要があります。ajax呼び出しを開始するリクエストではなく、サーブレット/jspリクエストの異なるペアになります。

于 2012-12-20T05:27:02.270 に答える