2017-08-08 95 views
0

私のJSPに依存性のドロップダウンリストがあります。私は2番目のドロップダウンを埋めるjsonサーブレットを持っています。最初のドロップダウンの選択に基づいて、2番目のドロップダウンが決定されます。私はjsonServletクラス内にハードコードされた値を持っていますが、私はDAOメソッドからクエリを呼び出せます。私はこれについてどうやって行くのですか?Json ServletからDAOメソッドを呼び出す方法

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); 
} 
divisionIDが33か36のどちらかであるならば、私のJsonServletでdivisionID選択をオフに基づいて

}

私は私のMasterDataDaoクラスでこのメソッドを呼び出すしたいと思います:

それ以外の選択値(Select Division以外)の場合は、MasterDataDaoクラスを使用してこのメ​​ソッドを呼び出します。

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; 
} 

これはJsonServlet内で実行できますか?もしそうなら、どのように?前もって感謝します。 詳細情報が必要な場合はお知らせください。

また、私はここにJSPを含めました。当初、私はここからDAOを呼び出しました。私はBeanを参照しました。 JSP:私はJSONやAJAXを使用する前にもともと

<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> 
<% 
    } 
%> 

私は今、コメントアウトされたオプションのためにこの文を使用していました。

<%--    <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} 

これを利用できる方法はありますか?たぶん、サーブレットからJSPに関数呼び出しを行うことはできますか?私はこれが良い習慣ではないことを知っていますが、別の方法を考えることはできません。私はsiteDto.id値とsiteDto.name値を取得する必要があります。 ありがとうございます

+0

目的のクラスのインスタンスを作成し、その上で目的のメソッドを呼び出すときに直面する問題は何ですか?これは単なる基本的なJavaであり、クラス/メソッドが何をしているのか、呼び出し元が何をしているのかにはまったく依存しません。これは基本的にJSON/Ajax/JSP/Servletsとは関係がありません。 – BalusC

+0

こんにちはBalusC。私はサーブレット内で直接DAOメソッドを呼び出そうとしましたが、私のメソッドを静的メソッドに変更したいと思っていました。これは、そのメソッド内で接続コールがあっても変更する必要があるので、問題を引き起こします – Sonny

+0

それで、インスタンスを作成していないのですか?あなたがそれのインスタンスを作成できないのは何ですか? – BalusC

答えて

0

IMasterDataDAOMasterDataDAOImplのように、インターフェイスと実装を作成します。DAO

if..elseの代わりにswitch..caseを使用してください。

は、以下のようなservletでインタフェースを使用してDAOのオブジェクトを作成する:

IMasterDataDAO masterDAO = new MasterDataDAOImpl() 

その後条件に基づいmasterDAO.getAllJSites()又はmasterDAO.getAllSites()のいずれかを呼び出します。

+0

こんにちはZaynとPrasanna。お返事をありがとうございます。上記のように、私はインターフェイスと実装ファイルの両方を作成しました。どのように私は結果セットを考え、今ドロップダウンに移入することになるだろうか?私はこのようなものを書いている: 場合(divisionIdName.equals( "33")|| divisionIdName.equals( "36")){ \t \t \t \t \t \t list.add( "サイトを選択します")。 \t \t \t list.add(0、 "ALL");用 \t \t \t(反復子 ITER = jj_site.listIterator(); \t \t \t \t \t ITER .hasNext()){ \t \t \t \t list.add(siteDtoList.getId())。 \t \t \t \t // String element = iter.next(); \t \t \t} – Sonny

+0

こんにちは。 JSPコードを追加し、JSONを使用する前に最初にオプション呼び出しをどのように行っていたかを示しました。それは今コメントされています。私がこれを活用できる方法はありますか?上記の私のJSPでピークを取ってください。 - – Sonny

関連する問題