8 給与の増額

「給与の増額」機能では、入力されたパーセントに従って値を増分することで、すべての従業員の給与が変更されます。

Webページのプレースホルダに昇給のパーセントを入力します。「確認」をクリックして、データベース表内のすべての従業員の給与を変更します。「すべてリスト」タブをクリックして、変更内容を確認できます。 全従業員の給与の増加率を入力します。

この章では、給与の増額機能の作成に必要なコードの追加方法について学習します。次の方法について学習します。
  1. JavaBean.javaで新しいメソッドincrementSalary(int)を宣言します。
  2. 新しいメソッドincrementSalary(int)JavaBeanImpl.javaで実装します。
  3. 新しいコードをWebController.javaに追加して、リクエストとレスポンスを処理します。
  4. 結果を表示するHTMLページincrementSalary.htmlを作成します。

新しいメソッドincrementSalary(int)の宣言

incrementSalary(int)メソッドは、指定されたパーセントに従って値を増分することで、すべての従業員の給与値を更新します。

クラス名: src/main/java/com/oracle/jdbc/samples/bean/JavaBean.java.

Githubの場所: JavaBean.java

新しいメソッドを宣言するステップ:

  1. IntelliJでJdbcBean.javaファイルを開きます。JdbcBean.javaクラスを作成するには、JDBC接続のためのJava Beanインタフェースの作成を参照してください。同じクラスを使用し、各機能に対して新しいメソッドを宣言します。
  2. 入力パラメータとしてパーセントの整数を取るメソッドincrementSalary(int)を宣言します。
    public List<Employee> incrementSalary(int incrementPct);

新しいメソッドincrementSalary( int)の実装

incrementSalary(int)メソッドを使用すると、指定されたパーセントに従ってすべての従業員の給与を増分できます。

クラス名: src/main/java/com/oracle/jdbc/samples/bean/JavaBeanImpl.java

Githubの場所: JavaBeanImpl.java

新しいメソッドを実装するステップ:

  1. IntelliJでJdbcBeanImpl.javaファイルを開きます。JdbcBeanImpl.javaクラスを作成するには、JDBC接続のためのJava Bean実装の作成を参照してください。同じクラスを使用し、各機能に対して新しい実装メソッドを追加します。
  2. 次のコード・スニペットを追加して、incrementSalary(int)メソッドを実装します。
    
    public List<Employee> incrementSalary (int incrementPct) {
      List<Employee> returnValue = new ArrayList<>();
    
      
    /* Get the database connection*/
      try (Connection connection = getConnection()) {
        try (CallableStatement callableStatement = 
            connection.prepareCall("begin ? :=  refcur_pkg.incrementsalary(?); end;")) {
              callableStatement.registerOutParameter(1, OracleTypes.CURSOR);
              callableStatement.setInt(2, incrementPct);
              callableStatement.execute();
              try (ResultSet resultSet = (ResultSet) callableStatement.getObject(1)) {
                while (resultSet.next()) {
                  returnValue.add(new Employee(resultSet));
                }
              }
        }
      } catch (SQLException ex) {
    /* Catch the SQLException and log the message in the logger*/
        logger.log(Level.SEVERE, null, ex);
        ex.printStackTrace();
      }
    
    return returnValue;
    }

サーブレットへのコードの追加

すべての従業員に昇給を与えるための関連コードをWebController.javaに追加します。

クラス名: src/main/java/com/oracle/jdbc/samples/web/WebController.java

Githubの場所: WebController.java

コードを追加するステップ:

  1. WebController.javaクラスを開きます。WebController.javaを作成するには、リクエストを処理するサーブレットの作成を参照してください。同じクラスを使用して、必要なコードを追加します。
  2. 変数INCREMENT_PCTを宣言し、給与の増分パーセントを取得します。これはグローバル変数であるため、processRequest()メソッドの外部で、ただしWebControllerクラスの内部で宣言します。
    private static final String INCREMENT_PCT = "incrementPct";
  3. doPost(req, res)メソッドを次のように追加します。
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
      Map<String,String[]> x = request.getParameterMap();
      String value = null;
      if ((value = request.getParameter(INCREMENT_PCT)) != null) {
        Gson gson = new Gson();
        response.setContentType("application/json");
        List<Employee>  employeeList = jdbcBean.incrementSalary(Integer.valueOf(value));
        gson.toJson(employeeList,
            new TypeToken<ArrayList<Employee>>() {
            }.getType(),
            response.getWriter());
      }
    else {
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
      }
    }

給与の増額のための新規HTMLの作成

incrementSalary.htmlページに、昇給を計算するためのパーセントを入力する入力ボックスが表示されます。

クラス名: src/main/webapp/incrementSalary.html。

Githubの場所: incrementSalary.html

HTMLページを作成するステップ:

  1. HTMLページのtitle、stylesheetおよびbodyを作成します。
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>Increment Salary</title>
    <link rel="stylesheet" type="text/css" href="css/app.css" >
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    <script    src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js">script    src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
    </head>
  2. 昇給率を取得するための<body>タグと<input>を開始します。
    <body>
    <div> Enter the percentage increase in salary<inputid='incrementField' type="number" max="100" min="3">%
    </div>
    <div id="UpdateButton"> <button type="button" class="btn btn-info btn-lg" onclick='javascipt:confirmUpdate()'> Increment Salaries</button> <button type="button" class="btn btn-default btn-lg" onclick='javascipt:cancelUpdate()'>Cancel</button></div>
    <div id="status" class="none"></div>
    <div id="id-emp"></div>
    <script>
    function showStatus(c, message) {
         $('#status').text(message);
         $('#status').attr('class', c);
           }
    
    function confirmUpdate() {
      var increment = $('#incrementField').val();
      var res = confirm("Do you really want to Increment Salary by " +increment +"%?");
      if(res == true) {
        console.log("Salary record");
        $('#UpdateButton').hide();
        showStatus("alert alert-info", "Updating records, processing request");
        var xmlhttp = new XMLHttpRequest();
        var url = "WebController?op=incrementSalary&incrementPct=" +increment;
        xmlhttp.onreadystatechange = function() {
          if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            processResponse(xmlhttp.responseText);
            showStatus("alert alert-success", "Updating records, successfully updated");
          }
          else {
            showStatus("alert alert-danger", "Updating records, failure, could not update records");
          }
        }
        xmlhttp.open("POST", url, true);
        xmlhttp.send();
        showStatus("alert alert-info", "Updating records, request sent");
    
      }
      else {
        console.log("Salary not updated");
        showStatus("alert alert-warning", "Updating records, attempt cancelled");
    
      }
    }
    
    </script>
  3. HTMLページにJSON結果を表示するprocessRequest()関数を作成します。
    unction processResponse(response) {
      var arr = JSON.parse(response);
      var i;
      var out = "<table>";
    keys = Object.keys(arr[0]);
    
     /* Print headers */
      out += "<tr>"
    for(i = 0; i < keys.length; ++i) {
        out += "<th>"+keys[i]+"</th>"
    }
    out += "</tr>";
    
    /* Print values */
    for(j = 0; j < arr.length; j++) {
    out += "<tr>"
    for(i = 0; i < keys.length; ++i) {
    out += "<td>"+arr[j][keys[i]]+"</td>"
    }
    out += "</tr>"
    }
    out += "</table>";
    document.getElementById("id-emp").innerHTML = out;
    }