8 給与の増額
「給与の増額」機能では、入力されたパーセントに従って値を増分することで、すべての従業員の給与が変更されます。
Webページのプレースホルダに昇給のパーセントを入力します。「確認」をクリックして、データベース表内のすべての従業員の給与を変更します。「すべてリスト」タブをクリックして、変更内容を確認できます。
JavaBean.java
で新しいメソッドincrementSalary(int)
を宣言します。- 新しいメソッド
incrementSalary(int)
をJavaBeanImpl.java
で実装します。 - 新しいコードを
WebController.java
に追加して、リクエストとレスポンスを処理します。 - 結果を表示するHTMLページ
incrementSalary.html
を作成します。
新しいメソッドincrementSalary(int)の宣言
incrementSalary(int)
メソッドは、指定されたパーセントに従って値を増分することで、すべての従業員の給与値を更新します。
クラス名: src/main/java/com/oracle/jdbc/samples/bean/JavaBean.java
.
Githubの場所: JavaBean.java
新しいメソッドを宣言するステップ:
- IntelliJで
JdbcBean.java
ファイルを開きます。JdbcBean.javaクラスを作成するには、JDBC接続のためのJava Beanインタフェースの作成を参照してください。同じクラスを使用し、各機能に対して新しいメソッドを宣言します。 - 入力パラメータとしてパーセントの整数を取るメソッド
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
新しいメソッドを実装するステップ:
- IntelliJで
JdbcBeanImpl.java
ファイルを開きます。JdbcBeanImpl.java
クラスを作成するには、JDBC接続のためのJava Bean実装の作成を参照してください。同じクラスを使用し、各機能に対して新しい実装メソッドを追加します。 - 次のコード・スニペットを追加して、
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
コードを追加するステップ:
WebController.java
クラスを開きます。WebController.java
を作成するには、リクエストを処理するサーブレットの作成を参照してください。同じクラスを使用して、必要なコードを追加します。- 変数
INCREMENT_PCT
を宣言し、給与の増分パーセントを取得します。これはグローバル変数であるため、processRequest()
メソッドの外部で、ただしWebController
クラスの内部で宣言します。private static final String INCREMENT_PCT = "incrementPct";
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ページを作成するステップ:
- 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>
- 昇給率を取得するための
<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>
- 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; }