出勤ボタンが押されてなければエラーページに行くのですが退勤ボタンを押した後にまた退勤ボタンを押すと更新され無いようにしたいですがうまくいかないので教えていただきたいです。
package dto;
import java.sql.Date;
import java.sql.Time;
public class WorkDto {
private int id; private String userid; private Date workday; private Time attendacetimes; private Time absencetimes; public WorkDto (){ } public WorkDto (String userid,Date workday,Time attendacetimes, Time absencetimes){ this.userid = userid; this.workday = workday; this.attendacetimes = attendacetimes; this.absencetimes = absencetimes; } public int getid() { return id; } public void setid(int id) { this.id = id; } public String getUserid() { return userid; } public void setUserid(String userid) { this.userid = userid; } public Date getWorkday() { return workday; } public void setWorkday(Date workday) { this.workday = workday; } public Time getAttendacetimes() { return attendacetimes; } public void setAttendacetimes(Time attendacetimes) { this.attendacetimes = attendacetimes; } public Time getAbsencetimes() { return absencetimes; } public void setgetAbsencetimes(Time absencetimes) { this.absencetimes = absencetimes; }
}
package servlet;
import java.io.IOException;
import java.sql.Time;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import dto.UserDto;
import dto.WorkDto;
import logic.WorkLogic;
/**
- Servlet implementation class AbsenceServlet
*/
@WebServlet("/AbsenceServlet")
public class AbsenceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/** * @see HttpServlet#HttpServlet() */ public AbsenceServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //レスポンス(出力データ)の文字コードを設定 response.setContentType("text/html;charset=UTF-8"); //文字コードをUTF-8で設定 //リクエスト(受信データ)の文字コードを設定 request.setCharacterEncoding("UTF-8"); //文字コードをUTF-8で設定 //セッションからユーザーデータを取得 HttpSession session = request.getSession(); UserDto userLoginSession = (UserDto)session.getAttribute("userlogin"); String userid = (String)session.getAttribute("userid"); //セッションからパラメータ取得(userid) //java.util.Dateからjava.sql.Dateに変換 java.util.Date d = new java.util.Date();//現在日時を取得 java.sql.Date workday = new java.sql.Date(d.getTime()); //ログイン状態によって表示画面を振り分ける if (userLoginSession != null) { boolean succesFlg = true; //成功フラグ(true:成功/false:失敗) WorkDto workdto = new WorkDto(); workdto.setUserid(userid); workdto.setWorkday(workday); workdto.setgetAbsencetimes(new Time(System.currentTimeMillis()));//現在時刻 //DBに登録 WorkLogic worklogic = new WorkLogic(); try { succesFlg = worklogic.registAbsencetimeCheck(workdto); } catch (Exception e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } //成功/失敗に応じて表示させる画面を振り分ける if (succesFlg) { //成功 request.getRequestDispatcher("/WEB-INF/jsp/absencetimes_success.jsp").forward(request, response); } else { //失敗した場合、エラー画面(error.jsp)を表示する request.getRequestDispatcher("/WEB-INF/jsp/erro.jsp").forward(request, response);
// request.setAttribute("error", "再入力してください。");
}
}else {
//失敗:ログインNGとしてログイン画面へ転送
request.getRequestDispatcher("/WEB-INF/jsp/user_login.jsp").forward(request, response);
}
}
}
package dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import dto.WorkDto;
public class WorkDao {
private DBConnection db;
public WorkDao(DBConnection db) {
this.db = db;
}
//JDBCの接続に使用するオブジェクトを宣言
Connection con = null ; // Connection(DB接続情報)格納用変数
PreparedStatement ps = null ; // PreparedStatement(SQL発行用オブジェクト)格納用変数
ResultSet rs = null ; // ResultSet(SQL抽出結果)格納用変数
//--------------------退勤処理--------------------------
public boolean registAbsencetime(WorkDto workdto) throws Exception {
boolean judge = false;
try {
con = db.getConnection();
con.setAutoCommit(false);
//出勤が押されていなかったらfalseを返す
String sql = "SELECT * from worktimetable WHERE userid = ? AND workday = ?";
ps = con.prepareStatement(sql);
ps.setString(1, workdto.getUserid());
ps.setDate(2, workdto.getWorkday());
ResultSet rs = ps.executeQuery();
if(rs.next()) {
//退勤が押されていたらfalseを返す
sql = "SELECT * from worktimetable WHERE userid = ? AND workday = ? AND absencetimes = ?";
ps = con.prepareStatement(sql);
ps.setString(1, workdto.getUserid());
ps.setDate(2, workdto.getWorkday());
ps.setTime(3, workdto.getAbsencetimes());
rs = ps.executeQuery();
if(rs.next()) {
judge = false;
}else {
sql = "UPDATE worktimetable SET absencetimes = ? WHERE userid = ? AND workday = ?";
ps = con.prepareStatement(sql);
ps.setTime(1, workdto.getAbsencetimes());
ps.setString(2, workdto.getUserid());
ps.setDate(3, workdto.getWorkday());
ps.executeUpdate();
judge = true ;
}
} else {
judge = false;
}
}catch (SQLException e) {
e.printStackTrace();
//実行結果を例外発生として更新
judge = false ;
} finally {
//-------------------------------------------
//トランザクションの終了
//-------------------------------------------
if(judge){
//明示的にコミットを実施
try {
con.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}else{
//明示的にロールバックを実施
try {
con.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//-------------------------------------------
//接続の解除
//-------------------------------------------
//PreparedStatementオブジェクトの接続解除
if (ps != null) { //接続が確認できている場合のみ実施
try {
ps.close(); //接続の解除
} catch (SQLException e) {
e.printStackTrace();
}
}
//Connectionオブジェクトの接続解除
if (con != null) { //接続が確認できている場合のみ実施
try {
con.close(); //接続の解除
} catch (SQLException e) {
e.printStackTrace();
}
}
//実行結果を返す
return judge;
}
回答2件
あなたの回答
tips
プレビュー