質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

受付中

ログアウト後のグローバルメッセージが出せない

sanezane
sanezane

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

1回答

0評価

0クリップ

11閲覧

投稿2019/04/02 15:24

###やりたいこと
ログアウトした時にログイン画面へ戻るのですが、そこに「ログアウトしました」と表示させたい。
ログイン後の画面にはメッセージ出力できるのにログアウト後の最初の画面ではメッセージが出力できない状況です。
先にGitHubへあげているソースコードを載せます

###やり方
RedirectAttributesを使ってコントローラからフロント側へ値を渡す。

####成功イメージ
######例)ログインした際

LoginController

/** * ログイン成功 */ @PostMapping("/success") public String loginsuccess(@ModelAttribute LoginForm loginForm, RedirectAttributes redirectAttributes){ redirectAttributes.addFlashAttribute(GLOBAL_MESSAGE, getMessage("login.success")); return "redirect:/"; }

イメージ説明

イメージ説明

こんな感じで共通レイアウトに以下のように定義することでメッセージを表示しています。

loginSuccesshtml

...省略 <!--header_end--> <div class="container-fluid"> <!--/* グローバルメッセージ */--> <section class="content-header" th:remove="${#strings.isEmpty(str)}? body : none" th:with="str=${GlobalMessage}"> <p th:text="${str}" class="alert alert-danger"></p> </section> ...省略

###失敗イメージ

LoginController

/** * ログアウト成功 */ @GetMapping("/logoutSuccess") public String logout(@ModelAttribute LoginForm loginForm, Model model,RedirectAttributes redirectAttributes) { redirectAttributes.addFlashAttribute(GLOBAL_MESSAGE, getMessage("logout.success")); /* 20190309 ログアウト処理が成功したら本メソッドで受け取る */ return "redirect:/login"; }

イメージ説明
からのログアウト
イメージ説明

loginhtml

<div class="content-wrapper"> <!--/* グローバルメッセージ */--> <section class="content-header" th:remove="${#strings.isEmpty(str)}? body : none" th:with="str=${GlobalMessage}"> <p th:text="${str}" class="alert alert-danger"></p> </section>

###なぜログアウトでできないのか(何が違うのか)

ログアウト後に表示するログイン画面と、「例)」で紹介している画面(ログイン成功後)は違うレイアウトを使っています。
######・ログアウト後(ログイン画面)→ layout.htmlメッセージ出ないやつ

layout

<!--body部のみ抜粋--> <body class="skin-purple"> <div class="container"> <!--/* content */--> <div class="content-wrapper"> <!--/* グローバルメッセージ */--> <section class="content-header" th:remove="${#strings.isEmpty(str)}? body : none" th:with="str=${GlobalMessage}"> <p th:text="${str}" class="alert alert-danger"></p> </section> <!--/* コンテンツ 個別画面の中身が入ってくるエリア ここから*/--> <section layout:fragment="content" class="content"> <!--/* コンテンツ1 */--> <div class="box"> <div class="box-header with-border"> <h3 class="box-title">ボックスタイトル</h3> </div> <div class="box-body"> <p>ボックスボディー</p> </div> </div> </section> <!--/* コンテンツ 個別画面の中身が入ってくるエリア ここまで*/--> </div><!--/* end content */--> <!--/* フッター */--> <footer class="main-footer"> <div class="pull-right hidden-xs">Version 1.0</div> <strong>Copyright &copy; 2019</strong>, All rights reserved. </footer><!--/* end footer */--> </div><!--/* end wrapper */--> <div layout:fragment="footer" th:remove="tag"> </div> <div layout:fragment="scripts" th:remove="tag" /> <form name="logout" th:action="@{/logout}" method="post"></form> <script type="text/javascript" th:inline="javascript"> $(document).ready(function() { $("#logout").bind("click", function() { $("form[name='logout']").submit(); }); }); </script> </body>

######・ログイン成功後→ sidebarLayout.htmlメッセージでるやつ

sidebarLayout

<!--body部のみ抜粋--> <body class="d-flex"> <!--wrapper_start--> <!--<div class="d-flex w-100" id="wrapper">--> <!--wrapper_start--> <div class="d-flex w-100" id="wrapper"> <!--sidebar_start--> <div class="bg-light border-right" layout:fragment="sidebar" id="sidebar-wrapper"> <div class="sidebar-heading">Start Bootstrap </div> <div class="list-group list-group-flush"> <ul class="nav flex-column"> <li class="nav-item"> <div class="d-flex align-items-center"> <a href="#" class="nav-link"> Parent </a> <button class="btn btn-link btn-sm" data-target="#collapse-menu3" data-toggle="collapse"> <i class="fa fa-arrow-down" aria-hidden="true"></i> </button> </div> <ul id="collapse-menu3" class="collapse list-unstyled pl-3"> <li><a href="#" class="nav-link">Child-1</a></li> <li><a href="#" class="nav-link">Child-2</a></li> <li><a href="#" class="nav-link">Child-3</a></li> </ul> </li> </ul> </div> </div> <!--sidebar_end--> <!-- Page Content --> <div id="page-content-wrapper"> <!--header_start--> <header class="main-header"> <nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom"> <div class="collapse navbar-collapse" id="navbarSupportedContent"> <ul class="navbar-nav ml-auto mt-2 mt-lg-0"> <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> <li class="nav-item"> <a class="nav-link" href="#">Link</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Dropdown </a> <div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown"> <a class="dropdown-item" href="#">Action</a> <a class="dropdown-item" href="#">Another action</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="#">Something else here</a> </div> </li> <li class="nav-item"> <a class="nav-link" id="logout" href="#">Logout</a> </li> </ul> </div> </nav> </header> <!--header_end--> <div class="container-fluid"> <!--/* グローバルメッセージ */--> <section class="content-header" th:remove="${#strings.isEmpty(str)}? body : none" th:with="str=${GlobalMessage}"> <p th:text="${str}" class="alert alert-danger"></p> </section> <!--/* コンテンツ 個別画面の中身が入ってくるエリア ここから*/--> <section layout:fragment="content" class="content"> <!--/* コンテンツ1 */--> <div class="box"> <div class="box-header with-border"> <h3 class="box-title">ボックスタイトル</h3> </div> <div class="box-body"> <p>ボックスボディー</p> </div> </div> </section> <!--/* コンテンツ 個別画面の中身が入ってくるエリア ここまで*/--> </div><!--/* end content */--> <!--/* フッター */--> <footer class="main-footer"> <div class="pull-right hidden-xs">Version 1.0</div> <strong>Copyright &copy; 2019</strong>, All rights reserved. </footer><!--/* end footer */--> </div> </div> </div> <!--wrapper_end--> <script type="text/javascript" th:src="@{/webjars/jquery/3.1.1/jquery.min.js}"></script> <script type="text/javascript" th:src="@{/webjars/bootstrap/4.0.0/js/bootstrap.min.js}"></script> <div layout:fragment="scripts" th:remove="tag" /> <form name="logout" th:action="@{/logout}" method="post"></form> <script type="text/javascript" th:inline="javascript"> $(document).ready(function() { $("#logout").bind("click", function() { $("form[name='logout']").submit(); }); }); </script> <!-- Menu Toggle Script --> </body>

作りは同じにしているつもりですし、グローバルメッセージ部が読み込まれていることも確認済みです。(以下画像)
イメージ説明
イメージ説明

ご指摘をお願いいたします。

■■やってみたこと追加
静的ファイルの認証がかかっているかと思ったが、以下の通り設定済みだった。

SecurityConfig

@Override public void configure(WebSecurity web) throws Exception { // 静的ファイルへのアクセスは認証をかけない //WebConstとして定数定義 web.ignoring()// .antMatchers(WEBJARS_URL, STATIC_RESOURCES_URL,CSS_URL,JS_URL,IMAGE_URL); }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。