その他の地域情報の削除


主な活動領域

  • タグ管理とは異なり、予め提供されたデータからのみ選択可能である.
  • Zone.java
        @Override
        public String toString() {
            return String.format("%s(%s)/%s", city, localNameOfCity, province);
        }
    
    英語名(ハングル名)/省がこのように見えるようにtoString()を実施します.

    Q. toString()?


    オブジェクトが持つ情報または値を文字列に変換する方法.
    SettingsController.java
        @GetMapping(ZONES)
        public String updateZonesForm(@CurrentAccount Account account, Model model) throws JsonProcessingException {
            model.addAttribute(account);
    
            Set<Zone> zones = accountService.getZones(account);
            model.addAttribute("zones", zones.stream().map(Zone::toString).collect(Collectors.toList()));
    
            List<String> allZones = zoneRepository.findAll().stream().map(Zone::toString).collect(Collectors.toList());
            model.addAttribute("whitelist", objectMapper.writeValueAsString(allZones));
    
            return SETTINGS + ZONES;
        }
    コントローラはtagと非常に似ています.
    Accoutを追加し、getZones()を使用してaccountが所有するすべての情報を実行します.
    SettingsService.java
        public Set<Zone> getZones(Account account) {
            Optional<Account> byId = accountRepository.findById(account.getId());
            return byId.orElseThrow().getZones();
        }
    
        public void addZone(Account account, Zone zone) {
            Optional<Account> byId = accountRepository.findById(account.getId());
            byId.ifPresent(a -> a.getZones().add(zone));
        }
    
        public void removeZone(Account account, Zone zone) {
            Optional<Account> byId = accountRepository.findById(account.getId());
            byId.ifPresent(a -> a.getZones().remove(zone));
        }
    ゾーン情報をすべてゾーン:toString、文字列toStringに送信します.

    だからこうなったのです.
    whitelistはすべてのデータをzone Repositoryに読み込みtoStringにインポートしwithelistにします
    zones.html
                            <div id="whitelist" th:text="${whitelist}" hidden></div>
                            <input id="tags" type="text" name="tags" th:value="${#strings.listJoin(zones, ',')}"
                                   class="tagify-outside" aria-describedby="tagHelp"/>
    あなたが持っている情報${#strings.listJoin(領域,")}list join!😊
                function onAdd(e) {
                    tagRequest("/add", e.detail.data.value);
                }
    
                function onRemove(e) {
                    tagRequest("/remove", e.detail.data.value);
                }
    
    addまたはremove ajaxリクエストが発行された場合、SettingsControllerは処理します.
        @PostMapping(ZONES + "/add")
        @ResponseBody
        public ResponseEntity addZone(@CurrentAccount Account account, @RequestBody ZoneForm zoneForm) {
            Zone zone = zoneRepository.findByCityAndProvince(zoneForm.getCityName(), zoneForm.getProvinceName());
            if (zone == null) {
                return ResponseEntity.badRequest().build();
            }
    
            accountService.addZone(account, zone);
            return ResponseEntity.ok().build();
        }
    まずZONE名に対応するデータがあるかどうかをチェックし、ない場合はbadRequest()応答を送信します.

    既存の領域情報自動完了リストからのみ選択できます。

  • Tagifyのwhitelistを使用します.
  • https://yaireo.github.io/tagify/#section-textarea
  • 出典:インフラストラクチャ白旗仙のSpringとJPAベースのWebアプリケーション開発