| 18 | |
| 19 | |
| 20 | === Гласа онлајн |
| 21 | За да ја користи оваа функционалност, корисникот треба да пристапи до страницата /vote каде што го добива следниот приказ: |
| 22 | |
| 23 | За ова е одговорен следниот контролер |
| 24 | {{{#!java |
| 25 | @GetMapping("/vote") |
| 26 | public String showVote(@RequestParam(required = false) Boolean error, |
| 27 | Model m) { |
| 28 | m.addAttribute("replaceTemplate", "vote_form"); |
| 29 | m.addAttribute("error", error); |
| 30 | return "index"; |
| 31 | } |
| 32 | }}} |
| 33 | По успешен внес на потребните податоци во формуларот (број на лична карта и ЕМБГ), истиот се поднесува со клик на копчето „Продолжи“, при што се испраќа POST барање кое го пречекува следниот контролер: |
| 34 | {{{#!java |
| 35 | @PostMapping("/vote") |
| 36 | public String vote( |
| 37 | Model m, |
| 38 | @RequestParam String numberLicence, |
| 39 | @RequestParam String embg, |
| 40 | HttpServletRequest httpServletRequest) { |
| 41 | Citizen citizen = citizenService.validateCitizen(embg, numberLicence); |
| 42 | if (citizen != null) { |
| 43 | httpServletRequest.getSession(true).setAttribute("citizenId", citizen.getId()); |
| 44 | m.addAttribute("candidacies", candidacyService.findAll()); |
| 45 | m.addAttribute("replaceTemplate", "candidacy_list"); |
| 46 | return "redirect:/vote/available"; |
| 47 | } else { |
| 48 | m.addAttribute("replaceTemplate", "vote_form"); |
| 49 | return "redirect:/vote?error=true"; |
| 50 | } |
| 51 | } |
| 52 | }}} |
| 53 | Овде, најпрвин се прави валидација на корисникот преку повикување на соодветната функција од сервисот за граѓани |
| 54 | {{{#!java |
| 55 | @Override |
| 56 | public Citizen validateCitizen(String idNum, String documentNumber) |
| 57 | { |
| 58 | try { |
| 59 | Citizen citizen = findByIdNum(idNum); |
| 60 | return citizen.getDocument().getDocumentNumber().equals(documentNumber) ? citizen : null; |
| 61 | } |
| 62 | catch (Exception ex) |
| 63 | { |
| 64 | return null; |
| 65 | } |
| 66 | } |
| 67 | }}} |
| 68 | За спречување злопупотреба целиот процес на гласање се одвива преку чување на потребните атрибути во сесија на серверот, па така, по успешна валидација на граѓанинот, се креира нова сесија, како атрибут се запишува неговиот идентификатор и корисникот се пренасочува до страницата за избор на инстанца од избори на која ќе гласата (/vote/available). Во спротивно, корисникот се враќа на страницата за најава и се испишува соодветна порака за грешка. |