[JAVA] Spring Awakening Strategy Spring MVC Partie 1

Jouer avec Spring MVC (5)

Je ne peux pas être un système Struts1 pour toujours: sweat_smile:

Voulez-vous faire quelque chose en premier?

J'ai créé une application Todo transcendantalement simple: joy:

  1. Écran initial 初期画面.png
  2. Avant l'enregistrement 登録前.png
  3. Après l'enregistrement 登録後.png
  4. Une fois terminé 完了.png
  5. Avant de chercher 検索前.png
  6. Après la recherche 検索後.png
  7. Lister les paysages 全景.png

Lorsque vous appuyez sur le bouton «Terminer», une ligne d'annulation apparaît. Si vous appuyez sur le bouton "Résurrection", la destination d'annulation disparaîtra.

Inutile de dire que le contrôleur ressemble à ceci. «Inscription», «Recherche», «Terminé» et «Résurrection» sont tous redirigés. Et à chaque fois, toutes les données sont extraites du tableau, transformées en liste et passées à l'écran.

   @RequestMapping(value = "/newItem", params="newItem",method = RequestMethod.POST)
    @Transactional("transactionManagerName")
    public String newItem(@Validated TodoForm form, BindingResult result, Model model)
    {
    	DefaultTransactionDefinition dtDef = new DefaultTransactionDefinition();
    	TransactionStatus tSts = txMgr.getTransaction(dtDef);

		try
		{
			 jdbcTemplate.update("INSERT INTO todo (content,done) VALUES (?, ?)", form.getContent(),false);
			 txMgr.commit(tSts);
		}
		catch(Exception ex)
		{
			txMgr.rollback(tSts);
			logger.debug("mise à jour a échoué",ex.toString());
		}

        return "redirect:/";
    }

    @RequestMapping(value = "/newItem", params="searchItem",method = RequestMethod.POST)
    @Transactional("transactionManagerName")
    public String searchItem(@Validated TodoForm form, BindingResult result, Model model)
    {
    	String likeSQL = "select * from todo where content like '%" + form.getContent() + "%'";

		//Récupérer toutes les données de la table todo
		List<Map<String, Object>> ret = jdbcTemplate.queryForList(likeSQL);
		//Générer une liste de données à passer à l'écran
		List<TodoItem> mList = new ArrayList<TodoItem>();
		for(int i=0;i<ret.size();i++)
		{
			TodoItem tmp = new TodoItem();
			tmp.setId(ret.get(i).get("id").toString());
			tmp.setContent(ret.get(i).get("content").toString());
			if(ret.get(i).get("done").toString().equals("false"))
			{
				tmp.setDone(false);
			}
			else
			{
				tmp.setDone(true);
			}
			mList.add(tmp);
		}
		//Définissez la liste à transmettre à l'écran sur Modèle
		model.addAttribute("mList", mList );

		return "todo/todo";
    }

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String index(Locale locale, Model model)
	{
		//Récupérer toutes les données de la table todo
		List<Map<String, Object>> ret = jdbcTemplate.queryForList("select * from todo");
		//Générer une liste de données à passer à l'écran
		List<TodoItem> mList = new ArrayList<TodoItem>();
		for(int i=0;i<ret.size();i++)
		{
			TodoItem tmp = new TodoItem();
			tmp.setId(ret.get(i).get("id").toString());
			tmp.setContent(ret.get(i).get("content").toString());
			if(ret.get(i).get("done").toString().equals("false"))
			{
				tmp.setDone(false);
			}
			else
			{
				tmp.setDone(true);
			}
			mList.add(tmp);
		}
		//Définissez la liste à transmettre à l'écran sur Modèle
		model.addAttribute("mList", mList );

		return "todo/todo";
	}

    @RequestMapping(value = "/restore", method = RequestMethod.POST)
    @Transactional("transactionManagerName")
    public String restore(@Validated TodoForm form, BindingResult result, Model model)
    {
    	DefaultTransactionDefinition dtDef = new DefaultTransactionDefinition();
    	TransactionStatus tSts = txMgr.getTransaction(dtDef);

    	List<Map<String, Object>> ret = jdbcTemplate.queryForList("select * from todo WHERE id=?",new Object[]{form.getId()});
    	if(ret.size()>0)
    	{
    		TodoItem upItem = new TodoItem();
    		upItem.setId(form.getId());
    		upItem.setContent(form.getContent());
    		upItem.setDone(form.getDone());

    		SqlParameterSource param = new BeanPropertySqlParameterSource(upItem);

    		try
    		{
    			 jdbcTemplate.update("UPDATE todo SET done = ? WHERE id = ?",false,form.getId());
    			 txMgr.commit(tSts);
    		}
    		catch(Exception ex)
    		{
    			txMgr.rollback(tSts);
    			logger.debug("mise à jour a échoué",ex.toString());
    		}
    	}
    	else
    	{
    		logger.debug("Non soumis à mise à jour");
    	}

        return "redirect:/";
    }

    @RequestMapping(value = "/done", method = RequestMethod.POST)
    @Transactional("transactionManagerName")
    public String done(@Validated TodoForm form, BindingResult result, Model model)
    {

    	DefaultTransactionDefinition dtDef = new DefaultTransactionDefinition();
    	TransactionStatus tSts = txMgr.getTransaction(dtDef);

    	List<Map<String, Object>> ret = jdbcTemplate.queryForList("select * from todo WHERE id=?",new Object[]{form.getId()});
    	if(ret.size()>0)
    	{
    		TodoItem upItem = new TodoItem();
    		upItem.setId(form.getId());
    		upItem.setContent(form.getContent());
    		upItem.setDone(form.getDone());

    		SqlParameterSource param = new BeanPropertySqlParameterSource(upItem);

    		try
    		{
    			 jdbcTemplate.update("UPDATE todo SET done = ? WHERE id = ?",true,form.getId());
    			 txMgr.commit(tSts);
    		}
    		catch(Exception ex)
    		{
    			txMgr.rollback(tSts);
    			logger.debug("mise à jour a échoué",ex.toString());
    		}
    	}
    	else
    	{
    		logger.debug("Non soumis à mise à jour");
    	}

        return "redirect:/";
    }

J'utilise MySQL. La table ressemble à ceci.

CREATE TABLE `todo` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(50) DEFAULT NULL,
  `done` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

Cliquez ici pour une source mince: étreindre: https://github.com/pugachev/todomvc.git

Le temps était mauvais ce samedi et dimanche: parapluie2: il faisait froid: flocon de neige: donc je l'ai fait à la main. J'ai également évoqué d'autres personnes. Merci beaucoup.

Recommended Posts

Spring Awakening Strategy Spring MVC Partie 1
Spring Awakening Strategy Spring MVC Partie 4
Spring Awakening Strategy Spring MVC Partie 3
Spring Awakening Strategy Spring MVC Partie 2
Introduction à Spring Boot, partie 1
Implémenter le téléchargement de fichiers avec Spring MVC
Spring Boot à partir de zéro Partie 2
Spring Boot à partir de zéro Partie 1