2017-08-08 16 views
0

Ich habe eine Abhängigkeit Dropdown-Liste in meiner JSP. Ich habe ein JSON-Servlet, in dem ich das zweite Dropdown-Menü bevölkere. Basierend auf der Auswahl für das erste Dropdown wird das zweite Dropdown festgelegt. Ich habe Werte innerhalb der jsonServlet-Klasse fest codiert, aber ich möchte in der Lage sein, eine Abfrage von meiner DAO-Methode aufzurufen. Wie würde ich darüber gehen?So rufen Sie eine DAO-Methode von einem JSON-Servlet

JsonServlet:

package master.service; 

import java.io.IOException; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import master.dao.MasterDataDao; 
import master.dto.SiteDto; 

import com.google.gson.Gson; 

/** 
* Servlet implementation class JsonServlet 
* @param <E> 
*/ 
public class JsonServlet<E> extends HttpServlet { 
private static final long serialVersionUID = 1L; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
protected void doGet(HttpServletRequest request, 
     HttpServletResponse response) throws ServletException, IOException { 

    MasterDataDao masterDataDao = new MasterDataDao(); 
    String divisionIdName = request.getParameter("divisionIdName"); 
     List<String> list = new ArrayList<String>(); 
     List<SiteDto> site = new ArrayList<SiteDto>(); 
     String json = null; 

     if (divisionIdName.equals("33") || divisionIdName.equals("36")) { 
      try { 
       site.equals(masterDataDao.getAllJJSites()); 
       for (Iterator<SiteDto> iter = site.iterator(); iter.hasNext();){ 
        SiteDto element = iter.next(); 
        list.addAll(-1, element); 
       } 
      } catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      for (Iterator<SiteDto> iter = site.iterator(); iter.hasNext();){ 
       SiteDto element = iter.next(); 

      } 
     } else if (divisionIdName.equals("Select Division")) { 
       list.add("Select Site"); 

     } else { 
      try { 
       site.equals(masterDataDao.getAllSites()); 
       for (Iterator<SiteDto> iter = site.iterator(); iter.hasNext();){ 
        SiteDto element = iter.next(); 
        list.addAll(-1, element); 
       } 
      } catch (ClassNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     json = new Gson().toJson(list); 
     response.setContentType("application/json"); 
     response.getWriter().write(json); 
} 

}

die divisionID Auswahl in meinem JsonServlet Basiert weg, wenn der divisionID ist entweder 33 oder 36 Ich möchte diese Methode in meiner MasterDataDao Klasse nennen:

public List<SiteDto> getAllJJSites() throws IOException, ClassNotFoundException, SQLException { 
    List<SiteDto> siteDtoList = new ArrayList<SiteDto>(); 
    Connection con = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    try { 
     String query = "Select Distinct Name, Id From Addtl_Type Where Addtl_Type.is_active = '1' And Data_Field_Id = 3050 Order By Name"; 
     con = getConnection(); 
     ps = con.prepareStatement(query); 
     rs = ps.executeQuery(); 
     // System.out.println("&*******" + rs.getFetchSize()); 
     while (rs.next()) { 
      SiteDto siteDto = new SiteDto(); 
      siteDto.setId(rs.getString("Id")); 
      siteDto.setName(rs.getString("Name")); 
      siteDtoList.add(siteDto); 
     } 
    } finally { 

     cleanUp(con, ps, rs); 
    } 
    return siteDtoList; 
} 

Andernfalls, wenn es ein anderer Auswahlwert (neben Select Division) ist, möchte ich diese Methode mit der MasterDataDao-Klasse aufrufen:

public List<SiteDto> getAllSites() throws IOException, ClassNotFoundException, SQLException { 
    List<SiteDto> siteDtoList = new ArrayList<SiteDto>(); 
    Connection con = null; 
    PreparedStatement ps = null; 
    ResultSet rs = null; 
    try { 
     String query = "Select Distinct Name, Id From Addtl_Type Where Addtl_Type.is_active = '1' And Data_Field_Id = 105 Order By Name"; 
     con = getConnection(); 
     ps = con.prepareStatement(query); 
     rs = ps.executeQuery(); 
     // System.out.println("&*******" + rs.getFetchSize()); 
     while (rs.next()) { 
      SiteDto siteDto = new SiteDto(); 
      siteDto.setId(rs.getString("Id")); 
      siteDto.setName(rs.getString("Name")); 
      siteDtoList.add(siteDto); 
     } 
    } finally { 

     cleanUp(con, ps, rs); 
    } 
    return siteDtoList; 
} 

Ist dies innerhalb des JsonServlet möglich? Wenn das so ist, wie? Danke im Voraus. Bitte lassen Sie mich wissen, wenn mehr Informationen benötigt werden.

Auch ich habe meine JSP hier aufgenommen. Anfangs hatte ich von hier aus die DAO angerufen. Ich habe auf eine Bohne verwiesen. JSP:

<script> 
$(document).ready(function() { 

    $('#divisionId').change(function(event) { 
     var divisionId = $("select#divisionId").val(); 
     $.get('JsonServlet', { 
      divisionIdName : divisionId 
     }, function(response) { 

      var select = $('#siteId'); 
      select.find('option').remove(); 
      $.each(response, function(index, value) { 
       $('<option>').val(value).text(value).appendTo(select); 
      }); 
     }); 
    }); 
}); 
</script> 


</head> 
<body> 

<form name="input" action="getMasterData" method="get"> 



    <br /> <br /> 
    <h1 align='center'>Master Data File</h1> 
    <br /> <br /> 


    <table border="0" align='center'> 

     <tr> 
      <td> 
       <h2>Division</h2> 
      </td> 
      <td align='left'><jsp:useBean id="masterDaoUtil" 
        class="master.dao.util.MasterDataConstants" /> 
        <select name="divisionId" id="divisionId"> 
        <option>Select Division</option> 
        <option value="33"> 
<%=MasterDataConstants.DIVISION_TYPE_AUDIT_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="31"> 
<%=MasterDataConstants.DIVISION_TYPE_CHANGE_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="34"> 
<%=MasterDataConstants.DIVISION_TYPE_DEA_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="35"> 
<%=MasterDataConstants.DIVISION_TYPE_EHS_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="23"> 
<%=MasterDataConstants.DIVISION_TYPE_EVENT_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="36"> 
\ 
<%=MasterDataConstants.DIVISION_TYPE_QUALITY_EVENT_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="40"> 
<%=MasterDataConstants.DIVISION_TYPE_NORAMCO_AUDIT_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="43"> 


<%=MasterDataConstants.DIVISION_TYPE_NORAMCO_CHANGE_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="41"> 
<%=MasterDataConstants.DIVISION_TYPE_NORAMCO_DEA_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="42"> 
<%=MasterDataConstants.DIVISION_TYPE_NORAMCO_EHS_MANAGEMENT_GLOBAL_NAME%></option> 
        <option value="44"> 
<%=MasterDataConstants.DIVISION_TYPE_NORAMCO_EVENT_MANAGEMENT_GLOBAL_NAME%></option> 
      </select></td> 
     </tr> 
     <tr> 
      <td> 
       <h2>Site Name</h2> 
      </td> 
      <td align='left'> 
<%--    <jsp:useBean id="masterDao" 
        class="master.dao.MasterDataDao" /> 
--%>      
        <select name="siteId" 
       id="siteId"> 
        <option>Select Site</option> 
<%--     <option value="0">ALL</option> 
        <c:forEach items="${masterDao.allSites}" var="siteDto"> 
         <option value="${siteDto.id}">${siteDto.name} 
</option> 
        </c:forEach> 
--%>       
      </select></td> 
     </tr> 


    </table> 
    <br /> <br /> 
    <div style="text-align: center"> 
     <input type="submit" value="Submit"> 
    </div> 

</form> 
<% 
    if (request.getAttribute("message") != null) { 
%> 
<p> 
    <font size=4 color="red"> Master_Data(timestamp).xlsx and 
     Consistency_Check_Data(timestamp).xlsx are located under 
     d:/stage/MasterDataReports <%--Master_Data(timestamp).xlsx and Consistency_Check_Data(timestamp).xlsx are located under /jsc/ets/u02/tools7/apache-tomcat-7.0.55/webapps/MasterData/MasterDataReport--%> 
    </font> 
</p> 
<% 
    } 
%> 

Ursprünglich, bevor ich verwendet JSON und AJAX ich diese Aussage für die Optionen, die jetzt heraus kommentiert.

<%--    <jsp:useBean id="masterDao" 
       class="master.dao.MasterDataDao" /> 
    --%>      
       <select name="siteId" 
      id="siteId"> 
       <option>Select Site</option> 
    <%--     <option value="0">ALL</option> 
       <c:forEach items="${masterDao.allSites}" var="siteDto"> 
        <option value="${siteDto.id}">${siteDto.name} 

Gibt es eine Möglichkeit, die ich nutzen kann? Kann ich vielleicht einen Funktionsaufruf von meinem Servlet an die JSP machen? Ich weiß, das ist keine gute Übung, aber ich kann mir keinen anderen Weg vorstellen. Ich muss den siteDto.id Wert sowie den siteDto.name Wert erhalten. Vielen Dank im Voraus

+0

Was genau ist das Problem, vor dem Sie stehen, wenn Sie eine Instanz der gewünschten Klasse erstellen und dann die gewünschte Methode aufrufen? Dies ist nur Basis-Java und hängt absolut nicht davon ab, was die Klasse/Methode wiederum macht und auch nicht, was der Aufrufer tut. Dies hat mit JSON/Ajax/JSP/Servlets grundsätzlich nichts zu tun. – BalusC

+0

Hallo BalusC. Ich versuchte direkt, die DAO-Methoden in meinem Servlet aufzurufen, aber ich wollte, dass ich meine Methode in eine statische Methode änderte. Dies würde Probleme verursachen, da ich innerhalb dieser Methode Verbindungsaufrufe hätte, die ebenfalls geändert werden müssten. – Sonny

+0

Sie haben also keine Instanz davon erstellt? Was genau hindert Sie daran, eine Instanz davon zu erstellen? – BalusC

Antwort

0

Erstellen Sie eine Schnittstelle und Implementierung DAO wie IMasterDataDAO und MasterDataDAOImpl.

Wenn Sie in Zukunft mehr if..else Bedingung erhalten, dann verwenden Sie switch..case statt if..else.

ein Objekt für DAO Erstellen Sie die Schnittstelle in servlet wie unter Verwendung von:

nennen
IMasterDataDAO masterDAO = new MasterDataDAOImpl() 

dann entweder masterDAO.getAllJSites() oder masterDAO.getAllSites() unter der Bedingung basiert.

+0

Hallo Zayn und Prasanna. Vielen Dank für Ihre Antwort. Ich habe sowohl die Schnittstelle als auch die Implementierungsdatei wie oben beschrieben erstellt. Wie würde ich beim Iterieren des Ergebnissatzes und dem Auffüllen der Dropdown-Listen vorgehen? Ich habe so etwas wie folgt geschrieben: if (divisionIdName.equals ("33") || divisionIdName.equals ("36")) { \t \t \t \t \t \t list.add ("Website auswählen"); \t \t \t list.add (0, "ALL"); \t \t \t für (ListIterator iter = jj_site.listIterator(); iter \t \t \t \t \t .hasNext();) { \t \t \t \t list.add (siteDtoList.getId()); \t \t \t \t // Zeichenfolge element = iter.next(); \t \t \t} – Sonny

+0

Hallo prasanna. Ich habe jetzt meinen JSP-Code hinzugefügt und zeige, wie ich zuerst meine Optionsaufrufe machte, bevor ich JSON verwendete. es ist jetzt auskommentiert. Gibt es eine Möglichkeit, dies zu nutzen? Bitte nehmen Sie einen Höhepunkt an meiner JSP oben. - – Sonny

Verwandte Themen