2014-02-20 164 views
1

加载上的价值选择从数据库中的名单上有2下拉我的web page.A国家名单和省列表清单。 当页面加载,我的国家列表是从数据库填充,然后从列表中选择一个国家的选择,该国省清单还应从数据库填充。从另一个列表中

(我使用Hibernate逆向工程来创建数据库连接文件和bean类等)

我在做什么是填充国名单后,我得到这个国家的价值使用jQuery脚本选择,然后将它传递通过使用ajax的url到控制器类。我将在下面附上。

我所面临的问题是,当我从国家列表中选择,而不是填充两个下拉框再次印刷和全省列表框为空全省名单的国家。

这里是我的JSP文件

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Selection Page</title> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script> 

</head> 
<body> 
    <form name="locationSelection" method="POST"> 

    Select Country: 
     <br> 
     <select name="countryList" id="countryList"> 
      <option value="">Select Country</option> 
      <c:if test="${!empty countryList}"> 
       <c:forEach items="${countryList}" var="cont"> 
        <option value=${cont.countryId}>${cont.countryName}</option> 
       </c:forEach> 
      </c:if> 
     </select> 
     <br><br> 

     <script> 
     $(document).ready(function() 
     { 
      $("#countryList").change(function() 
      { 
       var selectedValue = $(this).find(":selected").val(); 
       $.ajax 
       ({ 
        url : "a.html?cID="+selectedValue+'', 
        success : function(result) 
        { 
         $("#prvContatiner").html(result); 
        } 
       }); 
      }); 
     }); 
     </script> 

     Select Province: 
     <div id="prvContatiner"> 
      <select name="provinceList" id="provinceList"> 
       <option value="">Select Province</option> 
         <c:if test="${!empty provinceList}"> 
       <c:forEach items="${provinceList}" var="cont"> 
        <option value=${cont.provinceId}>${cont.provinceDesc}</option> 
       </c:forEach> 
      </c:if> 
     </select> 
      </select> 
     </div> 

    </form> 
</body> 

,这里是我的控制器Java类

package controller; 

import java.io.IOException; 
import java.util.List; 
import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import dao.TblCountryDAO; 
import dao.TblProvinceDAO; 

@SuppressWarnings("serial") 
public class SelectionController extends HttpServlet { 
    void ProcessorRequest(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 

     String operation = request.getParameter("op"); 
     System.out.println("Operation: "+operation); 
     String cID = request.getParameter("cId"); 
     if (cID == null) 
     { 
      System.out.println(request.getRequestURI()); 
      TblCountryDAO dao = new TblCountryDAO(); 
      List<?> countryList = dao.findAll(); 
      request.setAttribute("countryList", countryList); 
      RequestDispatcher reqDispatcher = request.getRequestDispatcher("main.jsp"); 
      reqDispatcher.forward(request, response); 
     } 
     else 
     { 
      System.out.println("in elseif"); 

      TblProvinceDAO dao = new TblProvinceDAO(); 
      List<?> provinceList = dao.findByProperty("tblCountry.countryId", Integer.parseInt(cID)); 
      request.setAttribute("provinceList", provinceList); 
      RequestDispatcher reqDispatcher = request.getRequestDispatcher("main.jsp"); 
      reqDispatcher.forward(request, response); 
     } 
    } 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
     ProcessorRequest(req, resp); 
    } 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
     ProcessorRequest(req, resp); 
    } 
} 

我附上web.xml文件,以防万一

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 
    <display-name></display-name> 
    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>controller.SelectionController</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/a.html</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

任何其他建议做任务也将不胜感激

+0

如果您使用的镀铬按'F12'并单击Network'标签',然后选择下拉菜单,这将触发请求,您可以看到它的回应! – Yogesh

+0

我已经检查过它。国家的名单出现在全国correctly.every别的东西选择的地方是相同的,在全省块 –

+0

实际上它不是在控制器类else块去没有变化。我已经通过打印结果检查了省份列表,并且列表返回正常。但问题是如何让它进入else块。 –

回答

1

你正在寻找错误的参数request.getParameter("cId");应该request.getParameter("cID");使用cId将返回null值是,你会响应得到main.jsp中

+0

我纠正了它,但问题仍然是一样的。 –

+0

尝试重建和部署代码可能你的变化没有被反映出来 – Yogesh

+0

哦,太棒了。一个问题解决了,但额外的国家框和省箱仍保持出现 –

0

我想你可以切换到另一种方式来实现用JSON

在你得到省列表中的控制器来完成相同的任务。使用任何JSON库的诸如谷歌GSON或json.org并将其转换成对象的JSON数组这样

[{ 
"id":1, 
"name":"Delhi" 
},{ 
... 
... 
}, 
... 
] 

,并直接使用的PrintWriter打印JSON数组。

,然后在阿贾克斯成功响应产生这样的选项 -

$.ajax 
       ({ 
        url : "a.html?cID="+selectedValue+'', 
        success : function(result) 
        { 
         $("#provinceList").html(''); 
         for(var i=0;i<result.size;i++){ 
          var option = '<option value="'+result[i].id+'">'+result[i].name+'</option>' 
          $("#provinceList").append(option); 
         } 
        } 
       });