使用Servlet和AJAX删除依赖关系

时间:2013-08-17 11:40:25

标签: ajax jsp servlets

我有一个3下拉列表。第一个下拉列表是父级,我想在用户从1st选择一个值时填充第二个下拉列表,然后根据2nd填充第三个下拉列表。我正在使用servlet声明值。这是代码:

的Servlet

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    TblBIRFormNoDAO birdao = DAOFactory.getDaoManager(TblBIRFormNo.class);
    List<TblBIRFormNo> birtypelist = birdao.getAllBirFormNumber();
    request.setAttribute("birtypelist", birtypelist);

    String bir = request.getParameter("bfnsCode");
    TblTaxTypeDAO taxdao = DAOFactory.getDaoManager(TblTaxType.class);
    if(bir != null){
        List<TblTaxType> taxtypelist = taxdao.findAlltaxtCode(bir);
        String json = null;
    json = new Gson().toJson(taxtypelist);

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
    }

    String tax = request.getParameter("taxtCode");
    TblTaxTypeDAO tdao = DAOFactory.getDaoManager(TblTaxType.class);
    if(tax != null){
        List<TblTaxType> taxdesclist = tdao.findAlltaxtDesc (tax);
        String json = null;
        json = new Gson().toJson(taxdesclist);

    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(json);
    }

    request.getRequestDispatcher("/servlet-test.jsp").forward(request, response);
}

从这个servlet。我得到第一次下拉的值,但似乎我无法获得用于填充第二和第三的所选值的值。

jsp + AJAX:

        <script type="text/javascript">
    $(document).ready(function() {                                        
        $('#bfnsCode').change(function() {                               
            $.get('Test', function(responseJson) {                 
                var $select = $('#bfnsCode');                           
                $select.find('option').remove();                         
                $.each(responseJson, function(key, value) {              
                    $('<option>').val(key).text(value).appendTo($select);
                });
            });
        });
    });
</script>


                <label style="font-size: 17px;">BIR-Form Number</label><br>         
                <select name="bfnsCode" id="bfnsCode" class="sel" style="width: 245px; margin-left: 0;">
                    <option selected="selected" value=""></option>
                    <c:forEach var="bircode" items="${birtypelist}">
                         <option value="${bircode.bfnsCode}">${bircode.bfnsCode}</option>                            
                    </c:forEach>
                </select>
                <br><br>

                <label style="font-size: 17px;">Tax Type</label><br>            
                <select name="taxtCode" id="taxtCode" class="sel" style="width: 245px; margin-left: 0;">
                    <option selected="selected" value=""></option>
                    <c:forEach var="taxtype" items="${taxtypelist}">
                         <option value=""></option>                              
                    </c:forEach>                                    
                </select>
                <br><br>

                <label style="font-size: 17px;">Account Code</label><br>    
                <select name="taxtDesc" id="taxtDesc" class="sel" style="width: 245px; margin-left: 0;">
                    <option selected="selected" value=""></option>
                    <c:forEach var="taxdesc" items="${taxdesclist}">
                         <option value="${taxdesc.taxtDesc}">${taxdesc.taxtDesc}</option>                            
                    </c:forEach>                                    
                </select>

这一部分,唯一显示的值是第一次下拉。 AJAX缺少什么代码?还是servlet?

2 个答案:

答案 0 :(得分:0)

请找到这个参考资料,这将非常有用Reference

我可以暗示你的情景是,

1.加载页面,您可以获得第一个下载加载

2.更改首先写入ajax调用以将第一个下拉值作为输入传递给ajax调用并附加第二个选择选项

3.更改第二次写入ajax调用以传递第二个下拉值作为ajax调用中servlet的输入并附加第三个选择选项

答案 1 :(得分:0)

当第一个下拉列表的值发生更改时,您必须将所选值传递给jquery get函数,例如,

<script type="text/javascript">
$(document).ready(function() {                                        
    $('#bfnsCode').change(function() {  
        var $bfnscode=$("select#bfnsCode").val();                               
        $.get('Test',{bfnsCode:$bfnscode},function(responseJson) {                                                          
           var $select = $('#taxtCode');                           
           $select.find('option').remove();                  
            $.each(responseJson, function(key, value) {              
                $('<option>').val(key).text(value).appendTo($select);
            });
        });
    });
});

您从未将参数传递给get函数,也没有使用您的响应填充第二个下拉列表。您已尝试使用servlet中没有值填充相同的select选项。上面的代码应该适合你。祝你好运!

更新:我刚刚注意到您已尝试将请求转发给jsp。在进行AJAX调用时,不应重定向页面,因为您只是更新下拉列表,而jquery负责从servlet获取响应并更新接口。从servlet代码中删除它,

request.getRequestDispatcher("/servlet-test.jsp").forward(request, response);//remove this line