

(java)  
Eclipse4.6上でSpringSTSを利用してJava Webソフトを開発しています。  
最初のログイン画面から次のメニューに遷移する際にjspは実行してくれるのですが  
これに対応したControllerクラスのGETメソットを実行してくれません。  
タイトル用の画像をはめ込むだけですが  
なぜControllクラスに遷移しないのか不明です。  
関連のソースを以下に示します。

<ログインコントロール>

[code]

    package jp.vikingegg.VESales.control;
    import java.util.Locale;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import jp.vikingegg.VESales.common.EnvironmentInfo;
    import jp.vikingegg.VESales.service.LoginService;
    
    @Controller
    @RequestMapping(value = "/")
    public class LoginController {
        private static final Logger logger = LoggerFactory.getLogger　　　　　　　　　　　　　　　　　　　　　(LoginController.class);
    
        @Autowired
        private LoginService loginService;
    
        public LoginController(){
    
            loginService = new LoginService();
        }
    
        @RequestMapping(value = "/", method = RequestMethod.GET)
        public String getLogin(Locale locale, Model model) {
    
            logger.info("VikingEgg(LoginGET)  The client locale is {}.", locale);
    
            // 実行ユーザー情報クリア
            loginService.userInfoClear();
    
            // システム情報設定
            EnvironmentInfo environmentInfo = new EnvironmentInfo();
            model.addAttribute("systemImage",environmentInfo.getSystemImage());
            model.addAttribute("systemName",environmentInfo.getSystemName());
    
            String wView = "Login";
    
    
            return wView;
    
        }
    
        @RequestMapping(value = "/", method = RequestMethod.POST)
        public String postLogin(@RequestParam("userid") String pUserId,
                                 @RequestParam("password") String password,
                                 Locale locale,
                                 Model model) {
    
            try{
    
                logger.info("Login VikingEgg(LoginPOST)  The client locale is {}.", locale);
    
    
                String userId = pUserId;
                String pass = password;
    
                String retForm = "";
    
                // 入力エラーメッセージクリア
                model.addAttribute("errorMessage","");
    
                retForm = "/";
    
    
                loginService.GetUserInfo(userId, pass);
    
    
                String ErrMsg = loginService.UserIDCheck();
    
                if (ErrMsg == ""){
    
                    // メニュー
                    retForm = loginService.getMenu();
    
    
                }else{
    
                    // 入力エラー
                    model.addAttribute("errorMessage",ErrMsg);
                    logger.info("nextMenu : " + retForm);
    
                    retForm = "/";
    
    
                }
    
                //retForm = "forward:" + "AMenuController";
                logger.info("Login VikingEgg(NextMenu) = " + retForm, locale);
    
    
                return retForm;
    
    
            }catch(Exception e){
    
                logger.info("Login(POST) "+ e.toString()   , locale);
    
    
                return "";
            }
    
    
        }
    
    }
    
[/code]

<ログインから遷移するメニューのコントロールクラス>

[code]

    package jp.vikingegg.VESales.control;
    
    import java.io.IOException;
    import java.util.Locale;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    import jp.vikingegg.VESales.common.EnvironmentInfo;
    import jp.vikingegg.VESales.common.GlobalConst;
    import jp.vikingegg.VESales.service.AMenuservice;
    
    @Controller
    public class AMenuController  {
    
        private static final Logger logger = LoggerFactory.getLogger(AMenuController.class);
    
        @Autowired
        private AMenuservice amenuService;
    
        @RequestMapping(value = "/AMenu", method = RequestMethod.GET)
        public String getAMenu(Locale locale, Model model) throws IOException{
    
            logger.info("AMenu(GET)  The client locale is {}.", locale);
    
            try{
    
                logger.info("AMenu(GET)  AMenuGET", locale);
    
    
                // システム情報設定
                EnvironmentInfo environmentInfo = new EnvironmentInfo();
                model.addAttribute("systemImage",environmentInfo.getSystemImage());
                model.addAttribute("systemName",environmentInfo.getSystemName());
    
                String wView = GlobalConst.cnsMenuAdmin;
                return wView;
    
            }catch(Exception e){
    
                logger.info("AMenu(GET)  Error {"+ e.toString() + "}", locale);
    
                String wView = GlobalConst.cnsLogin;
                return wView;
    
            }
    
        }
    
        @RequestMapping(value = "/AMenu", method = RequestMethod.POST )
        public ModelAndView postAMenu(Locale locale, Model model){
    
            ModelAndView wView = new ModelAndView(GlobalConst.cnsMenuAdmin);
            return wView;
    
    
        }
    
    }
    
[/code]

<メニューのJSP>

[code]

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ page session="false" language="java" pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html lang="ja">
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
            <title>${systemName}（管理者メニュー）</title>
    
            <!-- Bootstrap CSS -->
            <link href="<c:url value="/resources/css/comm/bootstrap/bootstrap.min.css" />" rel="stylesheet" media="screen">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
            <!-- 全画面共通スタイル -->
            <link href="<c:url value="/resources/css/comm/projectcomm/common.css" />" rel="stylesheet" media="screen">
    
            <!-- ADMINメニュー画面のスタイル -->
            <link href="<c:url value="/resources/css/AMenu.css" />" type="text/css" rel="stylesheet" media="screen">
    
    
            <!-- JQuery -->
            <script type="text/javascript" src="<c:url value="/resources/js/comm/jquery/jquery.min.js" />" ></script>
    
            <!-- Bootstrap -->
            <script type="text/javascript" src="<c:url value="/resources/js/comm/bootstrap/bootstrap.min.js" />" ></script>
    
    
        </head>
        <body>
    
               <div class="row">
                   <div class="col-sm-2 col-md-2 col-lg-2">
                       <img class="profile-img" src="<c:url value="${systemImage}"/>" alt="">
                </div>
                   <div class="col-sm-10 col-md-10 col-lg-10">
                    <font>${systemName1}</font>
                </div>
            </div>
            <form id="AMenu" name="FormAMenu" method="post">
                <div class="center-block">
                    <div class="row">
                        <div class="col-sm-12 col-md-12 col-lg-12">
                            <ul id="dropmenu">
                              <li><a href="">ログアウト</a>
                              </li>
                              <li><a href="#">システム管理</a>
                                <ul>
                                  <li><a href="SystemEnv">システム環境</a></li>
                                  <li><a href="#">バッチスケジューラー</a></li>
                                  <li><a href="#">採番管理</a></li>
                                  <li><a href="#">エラーメッセージ管理</a></li>
                                  <li><a href="#">バックアップ</a></li>
                                </ul>
                              </li>
                              <li><a href="#">ユーザー管理</a>
                                <ul>
                                  <li><a href="#">会社登録</a></li>
                                  <li><a href="#">組織登録</a></li>
                                  <li><a href="#">社員ユーザ登録</a></li>
                                </ul>
                              </li>
                              <li><a href="#">統計処理</a>
                                <ul>
                                  <li><a href="#">アクセス解析</a></li>
                                </ul>
                              </li>
                              <li><a href="#">バックアップ</a>
                                <ul>
                                  <li><a href="#">データバックアップ</a></li>
                                  <li><a href="#">環境保存</a></li>
                                </ul>
                              </li>
                            </ul>
                        </div>
                    </div>
                  </div>
                <div class="center-block">
                    <div class="row">
                    </div>
                </div>
    
            </form>
    
        </body>
    </html>
    
[/code]


CC BY-SA 3.0
2016-09-20T01:26:24.450
28991
2019-08-17T10:03:00.363
2016-09-20T09:10:17.217
15185
18852
question
java spring
SpringMVCの画面遷移について


コントローラーの戻り値で文字列を指定した場合、通常はViewのパスを指定した事になります。

コントローラーから他のコントローラーへ遷移させたい場合はフォワードを使用します。  
フォワードを使用するには、戻り値の文字列に`forward:`を付けます。

AMenuControllerクラスのgetAMenu()のパスはRequestMappingで`/AMenu`となっているので、ここに遷移させたいのなら`forward:/AMenu`を戻り値にしてください。

ただしフォワードを使用した場合はブラウザに表示されるURLのパスは元のコントローラのパス(今回の場合は`/`)になります。

ブラウザに表示されるURLを遷移先コントローラのパスにしたい場合は、`redirect:`でリダイレクトを使用します。


CC BY-SA 3.0
2016-09-20T22:42:16.357
29010
2016-09-21T07:59:10.487
2016-09-21T07:59:10.487
18862
18862
28991
answer