Korzystanie z thymeleaf, aby wyświetlić komunikat o błędzie, zmienia układ mojej formularza logowania

0

Pytanie

Używam Thymeleaf do wyświetlania komunikatu o błędzie w formularzu logowania po wprowadzeniu nieprawidłowych danych logowania:

<body>
  <div class="container">
    <form class="form" id="login" th:action="@{/login}" method="post">
      <h1 class="form__title">Login</h1>
      <div th:if="${param.error}" class="form__message form__message-error">
        invalid username or password
      </div>
  </div>
</body>

Ponieważ jest to komunikat o błędzie div pojawia się tylko po wprowadzeniu nieprawidłowych danych logowania, moja forma zmienia swój układ - pola wprowadzania poruszają się w dół. Ja tego nie chcę. Chcę, aby forma wyglądała tak samo w każdym przypadku, tylko komunikat powinno być napisane lub usunięta. Czy ktoś wie, jak to osiągnąć?

authentication css html thymeleaf
2021-11-23 09:03:27
1

Najlepsza odpowiedź

0

th:if będzie tylko dodawać <div> kiedy error parametr zapytania jest. Aby zrobić to, co chcesz, musisz użyć CSS, albo mieć pusty div, lub wyświetlić jakiś tekst, korzystając z th:classappend aby wybrać klasę CSS do użytku.

Coś takiego:

<body>
  <div class="container">
    <form class="form" id="login" th:action="@{/login}" method="post">
      <h1 class="form__title">Login</h1>
      <div th:classappend="${param.error}?'show':'hide'" class="form__message form__message-error">
        invalid username or password
      </div>
  </div>
</body>

Z .show i .hide klasy zdefiniowane w swoim CSS.

2021-11-23 15:11:56

wydaje się, że to właśnie to, czego szukam! ... jednak, gdy dodaję ten blok div, spotykam z wyjątkiem TemplateProcessingException: <div th:classappend="${param.error ? 'form--hidden' : 'form--shown'}" class="form__message form__message-error"> invalid username or password </div> ... i w moim css pliku form--hidden po prostu mówi display: none i form-shown mówi display:block
Luk

W mojej odpowiedzi była literówka, poprawione teraz. Powinno być ${param.error} ? 'form--hidden' : 'form--shown' w twoim przypadku.
Wim Deblauwe

ach, dziękuję bardzo, Wim! Teraz to działa. Tylko forma nadal zmienia swój rozmiar. Ale myślę, że to chyba ma coś wspólnego z moim css. Dziwne, choć myślałem, że div wciąż tam jest, nawet jeśli wyświetlacz = nie.
Luk

Skorzystaj z visibility:hidden zamiast
Wim Deblauwe

świetnie, dziękuję bardzo!
Luk

W innych językach

Ta strona jest w innych językach

Русский
..................................................................................................................
Italiano
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................