2

この 1 つの 2 日目に悪戦苦闘。タグのリストを含む選択オプションフォームがあります。選択したタグに応じて、データベースから記事を表示したい。index.jsp に、記事を表示したい div "showArticles" があります。そのためにjqueryとajaxを使用しています。単純な文字列を出力するだけの test という名前のサーブレットを作成しましたが、テキストを受け取ることさえできず、サーブレットが呼び出されないようです。サーブレットは「サーブレット」と呼ばれるパッケージに含まれており、NetBeans を使用しています。

これは次の形式です。

                            <select id="b_sub_tag" name="b_sub_tag">
                                <option value='${0}'>Subject</option>
                                <c:forEach var="item" items="${subtagList}">
                                    <option value='${item}'>${item}</option>
                                    <c:set var="i" value='${i+1}'> </c:set>
                                </c:forEach>
                            </select>

これはjqueryです:

$(document).ready(function(){       
$("#b_sub_tag").change(function(){       
    var option_value = $(this).children('option:selected').val();

    $.ajax({
                   type: "POST",
                   url: "test",
                   data :"value="+option_value,
                   success: function(html) {
                               $("#showArticles").html(html);
                   }
           });
});

  });

これはサーブレットです:

@WebServlet(name = "test", urlPatterns = {"/test"})
public class test extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        /* TODO output your page here. You may use following sample code. */
        //response.getWriter().write("Omething");

    } finally {            
        out.close();
    }
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);

    response.getWriter().write("Smething");

}

@Override
public String getServletInfo() {
    return "Short description";
}// </editor-fold>
}

私は PrintWriter out = response.getWriter(); を試しました。out.println("何か");

同様に、何もありません。doPost() に出力を書き込んでいます。doGet と processRequest に書き込もうとしましたが、うまくいきませんでした。

なぜこれがうまくいかないのか、誰にも分かりますか?


問題は解決しました。次のようにコードを変更しました。

 $.ajax({
        url : "test",
        type: 'GET',
        ***data: {value:option_value},***

        error : function(jqXHR, textStatus, errorThrown) {
            alert(textStatus);
        },
        success : function(html){
           $("#showArticles").html(html);
           }
        }
    });

サーブレット:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try {

        final InitialContext context = new InitialContext();
        statefulb = (StatefulBeanRemote)     context.lookup("java:comp/env/StatefulBeanRemote");


        response.setContentType("text/plain");
        response.setCharacterEncoding("UTF-8");
        response.getWriter().write("A text"); 

    } catch (NamingException ex) {
        Logger.getLogger(LoadArticlesByTag.class.getName()).log(Level.SEVERE, null, ex);
    }
}
4

2 に答える 2

1

問題は解決しました。次のようにコードを変更しました。

$.ajax({ url : "test", type: 'GET', *data: {value:option_value},*

    error : function(jqXHR, textStatus, errorThrown) {
        alert(textStatus);
    },
    success : function(html){
       $("#showArticles").html(html);
       }
    }
});

サーブレット:

@Override protected void doGet(HttpServletRequest リクエスト、HttpServletResponse レスポンス) throws ServletException、IOException { try {

    final InitialContext context = new InitialContext();
    statefulb = (StatefulBeanRemote)     context.lookup("java:comp/env/StatefulBeanRemote");


    response.setContentType("text/plain");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write("A text"); 

} catch (NamingException ex) {
    Logger.getLogger(LoadArticlesByTag.class.getName()).log(Level.SEVERE, null, ex);
}

}

于 2013-04-06T16:18:13.620 に答える
0

URL を /test に変更してみてください:

$.ajax({
                   type: "POST",
                   url: "/test",
                   data :"value="+option_value,
                   datatype : "html",
                   success: function(html) {
                               $("#showArticles").html(html);
                   }
});
于 2013-04-05T15:08:56.837 に答える