Je voudrais écrire un article pour ceux qui écrivent des applications pour la première fois en utilisant Java. Nous vous serions reconnaissants de bien vouloir l'utiliser comme référence pour créer des thèmes de formation pour votre portefeuille et votre entreprise. Cette fois, nous allons créer un gestionnaire de tâches. En appliquant cela, il peut également être utilisé pour créer des clones Twitter.
Je publierai des articles pour chaque fonction de l'application.
eclipse4.16.0 Tomcat9 Java11 Mysql5.7
table des matières
Cette fois, nous allons créer une page d'édition. Il est très similaire à l'écran d'enregistrement des tâches que j'ai écrit dans l'article précédent, veuillez donc le vérifier facilement. Pour l'édition de tâches, les utilisateurs connectés peuvent modifier des éléments autres que ceux publiés par eux-mêmes.
task-update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Édition de tâches</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-insert.css">
</head>
<body>
<jsp:include page="header.jsp"/>
<jsp:useBean id="task" scope="session" class="model.entity.TaskBean"/>
<div class="contain">
<h3>Enregistrement des tâches</h3>
<form action="task-update-servlet" method="post">
<table class="form-table" border="1">
<tbody>
<tr>
<th>Nom de la tâche</th>
<td>
<div class="input-key">
<input type="text" class="form-control" name="task_name" value="<jsp:getProperty property="task_name" name="task"/>">
</div>
</td>
</tr>
<tr>
<th>Catégorie</th>
<td>
<div class="input-key">
<select class="form-control" name="category_id">
<option value="<jsp:getProperty property="category_id" name="task"/>">Pas de changement</option>
<option value="1">Nouveau produit A: Projet de développement</option>
<option value="2">Produit existant B:Projet d'amélioration</option>
</select>
</div>
</td>
</tr>
<tr>
<th>Date limite</th>
<td>
<div class="input-key">
<input type="date" name="limit_date" class="form-control" value="<jsp:getProperty property="limit_date" name="task"/>">
</div>
</td>
</tr>
<tr>
<th>statut</th>
<td>
<div class="input-key">
<select class="form-control" name="status_code">
<option value="<jsp:getProperty property="status_code" name="task"/>">Pas de changement</option>
<option value="00">pas encore commencé</option>
<option value="50">Début</option>
<option value="99">Terminé</option>
</select>
</div>
</td>
</tr>
<tr>
<th>Note</th>
<td>
<div class="input-key">
<input type="text" class="form-control" name="memo" value="<jsp:getProperty property="memo" name="task"/>">
</div>
</td>
</tr>
<tr>
<th>Date de création</th>
<td><jsp:getProperty property="create_datetime" name="task"/><input type="hidden" name="create_datetime" value="<jsp:getProperty property="create_datetime" name="task"/>"></td>
</tr>
<tr>
<th>
<input type="hidden" name="task_id" value="<jsp:getProperty property="task_id" name="task"/>">
<input type="hidden" name="version" value='<jsp:getProperty property="version" name="task"/>'>
<input type="submit" value="Mise à jour" class="input-submit"></th>
<td></td>
</tr>
</tbody>
</table>
</form>
</div>
</body>
</html>
De plus, nous préparerons un écran lorsque l'édition sera réussie. Le contenu modifié est affiché ici.
task-update-comp.java
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="model.entity.TaskBean"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Mise à jour terminée</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-edit-failure.css">
</head>
<body>
<jsp:useBean id="task" class="model.entity.TaskBean" scope="session"/>
<%
String category_name = (String)request.getAttribute("category_name");
String status_name = (String)request.getAttribute("status_name");
%>
<jsp:include page="header.jsp"/>
<div class="contain">
<div class="box">
<h3>Mise à jour de la tâche terminée</h3>
<p>Mis à jour avec le contenu suivant</p>
<hr>
<p>
Nom de la tâche:<jsp:getProperty property="task_name" name="task"/><br>
Catégorie:<jsp:getProperty property="category_id" name="task"/>:<%=category_name %><br>
Date limite:<jsp:getProperty property="limit_date" name="task"/><br>
statut:<jsp:getProperty property="status_code" name="task"/>:<%=status_name %><br>
Remarque:<jsp:getProperty property="memo" name="task"/><br>
</p>
</div>
</div>
</body>
</html>
Préparez également un écran en cas d'échec Afficher la raison de l'échec
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.List"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Échec de la mise à jour de la tâche</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/task-edit-failure.css">
</head>
<body>
<%
List<String> error = (List<String>)request.getAttribute("error");
%>
<jsp:include page="header.jsp"/>
<div class="contain">
<div class="box">
<h3>Échec de la mise à jour de la tâche</h3>
<hr>
<p>*Les causes suivantes sont possibles</p>
<ul>
<%for(String er : error){ %>
<li><%=er %></li>
<%} %>
</ul>
</div>
</div>
</body>
</html>
Création d'une méthode de mise à jour des tâches et d'une méthode de récupération de la tâche spécifiée
model.dao.TaskDAO.java
/**
*Méthode de mise à jour des tâches
* @param task
* @return sum
* @throws SQLException
* @throws ClassNotFoundException
*/
public int updateTask(TaskBean task) throws SQLException, ClassNotFoundException {
String sql = "update t_task set task_name = ?, category_id = ?, limit_date = ?, status_code = ?, memo = ?, version = version + 1 where task_id = ? and version = ?";
int sum = 0;
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql)){
pstmt.setString(1, task.getTask_name());
pstmt.setInt(2, task.getCategory_id());
pstmt.setDate(3, task.getLimit_date());
pstmt.setString(4, task.getStatus_code());
pstmt.setString(5, task.getMemo());
pstmt.setInt(6, task.getTask_id());
pstmt.setInt(7, task.getVersion());
sum = pstmt.executeUpdate();
}
return sum;
}
/**
* task_Obtenir une tâche spécifique avec id comme argument
* @param task_id
* @return
* @throws SQLException
* @throws ClassNotFoundException
*/
public TaskBean getSpecificTask(int task_id) throws SQLException, ClassNotFoundException {
TaskBean task = new TaskBean();
String sql = "select * from t_task where task_id = ?";
try(Connection con = ConnectionManager.getConnection();
PreparedStatement pstmt = con.prepareStatement(sql);){
pstmt.setInt(1, task_id);
ResultSet res = pstmt.executeQuery();
//Stocker les informations de colonne dans l'objet de tâche
while(res.next()) {
task.setTask_id(task_id);
task.setTask_name(res.getString("task_name"));
task.setCategory_id(res.getInt("category_id"));
task.setLimit_date(res.getDate("limit_date"));
task.setUser_id(res.getString("user_id"));
task.setStatus_code(res.getString("status_code"));
task.setMemo(res.getString("memo"));
task.setCreate_datetime(res.getTimestamp("create_datetime"));
task.setUpdate_datetime(res.getTimestamp("update_datetime"));
task.setVersion(res.getInt("version"));
}
}
return task;
}
Enregistrez les informations de tâche sélectionnées dans l'écran de liste dans l'étendue de la session et affichez / modifiez-les à la destination du transfert (task-update.java).
servlet.TaskUpdateDetailServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//Obtenir les paramètres de la demande
request.setCharacterEncoding("UTF-8");
int task_id = Integer.parseInt(request.getParameter("task_id"));
TaskDAO dao = new TaskDAO();
TaskBean task = new TaskBean();
try {
//Enregistrer la tâche spécifiée dans l'étendue de la session
task = dao.getSpecificTask(task_id);
HttpSession session = request.getSession();
session.setAttribute("task", task);
RequestDispatcher rd = request.getRequestDispatcher("task-update.jsp");
rd.forward(request, response);
}catch(SQLException | ClassNotFoundException e) {
e.printStackTrace();
}
Après l'édition, le traitement DB et la transition d'écran sont effectués avec le servlet suivant
servlet.TaskUpdateServket.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
TaskDAO taskdao = new TaskDAO();
CategoryDAO categorydao = new CategoryDAO();
StatusDAO statusdao = new StatusDAO();
//Obtenir les paramètres de la demande
request.setCharacterEncoding("UTF-8");
int task_id = Integer.parseInt(request.getParameter("task_id"));
String task_name = request.getParameter("task_name");
String category_id_str = request.getParameter("category_id");
String limit_date_check = request.getParameter("limit_date");
String status_code = request.getParameter("status_code");
String memo = request.getParameter("memo");
int version = Integer.parseInt(request.getParameter("version"));
//Génération de liste pour enregistrer l'affichage des erreurs
List<String> error = new ArrayList<String>();
//vérification de session
HttpSession session = request.getSession();
boolean sessioncheck = (boolean)session.getAttribute("login");
if(!sessioncheck) {
error.add("Veuillez vous connecter et enregistrer la tâche");
}
//Vérifier les omissions d'entrée
if(task_name.equals("")) {
error.add("Le nom de la tâche est vide");
}
boolean limit_check;
limit_date_check = limit_date_check.replace('-', '/');
DateFormat format = DateFormat.getDateInstance();
format.setLenient(false);
try {
format.parse(limit_date_check);
limit_check = true;
} catch(Exception e) {
limit_check = false;
}
if(!limit_check) {
error.add("Veuillez saisir la date de la date limite");
}
request.setAttribute("error", error);
if(task_name != "") {
try {
//Convertit les catégories et les délais (de type non-String) qui ne peuvent pas être reçus selon les paramètres
int category_id = Integer.parseInt(category_id_str);
Date limit_date = Date.valueOf(request.getParameter("limit_date"));
//Faire correspondre la version actuelle avec la version au moment de l'acquisition de l'enregistrement
int current_version = taskdao.getVersion(task_id);
if(current_version != version) {
error.add("Cette tâche a été réorganisée par d'autres");
request.setAttribute("error", error);
RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
rd.forward(request, response);
}
//Définir la valeur de l'objet de tâche
TaskBean task = new TaskBean();
task.setTask_name(task_name);
task.setCategory_id(category_id);
task.setLimit_date(limit_date);
task.setStatus_code(status_code);
task.setMemo(memo);
task.setTask_id(task_id);
task.setVersion(version);
//Traitement de la base de données par méthode de mise à jour
taskdao.updateTask(task);
//Enregistrer la tâche dans l'étendue de la session
session.setAttribute("task", task);
//Enregistrer le nom de la catégorie et le nom de l'état pour demander l'étendue
String category_name = categorydao.getCategoryName(task.getCategory_id());
String status_name = statusdao.getStatusName(task.getStatus_code());
request.setAttribute("category_name", category_name);
request.setAttribute("status_name", status_name);
RequestDispatcher rd = request.getRequestDispatcher("task-update-comp.jsp");
rd.forward(request, response);
} catch(SQLException | ClassNotFoundException | IllegalArgumentException e) {
RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
rd.forward(request, response);
}
}else {
RequestDispatcher rd = request.getRequestDispatcher("task-update-failure.jsp");
rd.forward(request, response);
}
}
Cette fois, nous avons implémenté la fonction d'édition des tâches. La prochaine fois, nous mettrons en œuvre la fonction de suppression de tâches.
Recommended Posts