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

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

ただいまの
回答率

88.10%

springbootの検索結果画面について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 3,856

score 42

前提・実現したいこと

springbootで会員検索結果画面を作成しています。
会員検索画面はfirst.index
会員検索結果画面はlogin.index
です。
使用しているDBはMysqlです。
DB上のカラムはID,名前,パスワードです。
会員検索画面で名前でDBに検索して、検索結果画面に検索結果が表示されてほしいのですが、結果
が画面上に表示されません。会員検索画面の情報(名前検索した情報)を会員検索結果画面に渡すにはどうすればいいでしょうか?
ご回答のほど宜しくお願い致します

ログ
2016-08-28 14:38:24.133  INFO 935 --- [           main] c.t.springboot.SokutakuhaiApplication    : Started SokutakuhaiApplication in 7.929 seconds (JVM running for 8.709)
2016-08-28 14:38:34.566  INFO 935 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-08-28 14:38:34.567  INFO 935 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2016-08-28 14:38:34.590  INFO 935 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 23 ms
2016-08-28 14:38:34.681  INFO 935 --- [nio-8080-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator  : HHH000397: Using ASTQueryTranslatorFactory
ModelAndView: reference to view with name 'first'; model is {title=Find Page, msg=サンプルです, value=, datalist=[com.tuyano.springboot.MyDataMongo@1df12e20]}
param1234
[com.tuyano.springboot.MyDataMongo@6a4b9990]
ModelAndView: reference to view with name 'first'; model is {title=Find Result, msg=[1234]の検索結果, value=1234, dataList=[com.tuyano.springboot.MyDataMongo@6a4b9990]}
ModelAndView: reference to view with name 'login'; model is {title=Find Page, msg=loginです, value=loginページです}
・HeloController
package com.tuyano.springboot;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.tuyano.springboot.repositories.MyDataMongoRepository;

@Controller
public class HeloController {

@Autowired
MyDataMongoRepository repository;

@RequestMapping(value="/",method=RequestMethod.GET)
public ModelAndView index(@ModelAttribute("formModel")MyDataMongo mydatamongo,ModelAndView mav){
    mav.setViewName("index");
    mav.addObject("title","Find Page");
    mav.addObject("msg","サンプルです");
    List<MyDataMongo> list=repository.findAll();
    mav.addObject("datalist",list);
    System.out.println(mav);
    return mav;
}
@RequestMapping(value="/",method=RequestMethod.POST)

public ModelAndView form(
        @ModelAttribute("formModel")MyDataMongo mydatamongo,ModelAndView mav){
    repository.saveAndFlush(mydatamongo);
    mav =new ModelAndView("redirect:/");
    System.out.println("mov"+mav);
    return mav;
}

@RequestMapping(value="/first",method=RequestMethod.GET)
public ModelAndView find(@ModelAttribute("formModel")MyDataMongo mydatamongo,ModelAndView mav){
    mav.setViewName("first");
    mav.addObject("title","Find Page");
    mav.addObject("msg","サンプルです");
    mav.addObject("value","");
    List<MyDataMongo> list=repository.findAll();
    mav.addObject("datalist",list);
    System.out.println(mav);
    return mav;
}
@RequestMapping(value="/first",method=RequestMethod.POST)
public ModelAndView search(@RequestParam("name")String param,ModelAndView mav){
    mav.setViewName("first");

    if(param ==""){
    mav =new ModelAndView("redirect:/first");
    }else{
        System.out.println("param"+param);
        mav.addObject("title","Find Result");
        mav.addObject("msg","["+param+"]の検索結果");
        mav.addObject("value",param);
        List<MyDataMongo> list=repository.findByName(param);
        System.out.println(list);
        mav.addObject("dataList",list);

    }
    System.out.println(mav);
    mav =new ModelAndView("redirect:/login");
return mav;
}    


@RequestMapping(value="/login",method=RequestMethod.GET)
public ModelAndView login(ModelAndView mav){
    mav.setViewName("login");
    mav.addObject("title","Find Page");
    mav.addObject("msg","loginです");
    mav.addObject("value","loginページです");
    System.out.println(mav);
    return mav;
}
}
・MyDataMongo.java
package com.tuyano.springboot;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;




@Entity
@Table(name="Linefriend")
public class MyDataMongo {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column
private Long id;

@Column
private String name;
@Column
private String password;
//private Date date;



//
public MyDataMongo() {

this.name="田中";
this.password="田中";
}

public void setId(Long id){

    this.id=id;

}

public Long getId(){

    return id;

}


public String getName(){

    return name;

}

public void setName(String name){

    this.name=name;

}



public String getPassword(){

    return password;

}

public void setPassword(String password){

    this.password=password;

}

//public Date getDate(){

    //return date;

//}




}
・first.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>top page</title>
<meta http-equiv="Content-Type"
content="text/html" charset="UTF-8"/>
</head>
<body>

   <h1 th:text="${title}">find Page</h1>
   <p th:text="${msg}"></p>
   <table>
   <form method="post" action="/first">
 <tr><td>名前</td>
 <td><input type="text" name="name" size="20" th:value="${value}"/></td></tr>
 <tr><td>パスワード</td>
 <td><input type="text" name="password" size="20" th:value="${value}"/></td></tr>
 <tr><td></td><td><input type="submit"/></td></tr>
 </form> 
 </table>
 <hr/>
 <table>
   <tr><th>名前</th><th>メモ</th><th>日時</th></tr>
   <tr th:each="obj :${dataList}">
   <td th:text="${obj.name}"></td>


   </tr>
   </table>


</body>
</html>
</html>
・login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>top page</title>
<meta http-equiv="Content-Type"
content="text/html" charset="UTF-8"/>
</head>
<body>

   <h1 th:text="${title}">find Page</h1>
   <p th:text="${msg}"></p>
 <table>
   <tr><th>名前</th><th>メモ</th><th>日時</th></tr>
   <tr th:each="obj :${dataList}">
   <td th:text="${obj.name}"></td>


   </tr>
   </table>


</body>
</html>
・MyDataMongoRepository.java
package com.tuyano.springboot.repositories;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.tuyano.springboot.MyDataMongo;


@Repository
public interface MyDataMongoRepository extends JpaRepository<MyDataMongo,String>{

public List<MyDataMongo> findByName(String s);


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

HeloControllerの68行目のコードに問題がありますね。

mav = new ModelAndView("redirect:/login");

さしあたっての問題は、ModelAndViewnewして再代入しまっているために、せっかくaddObjectで登録した情報が捨てられてしまっている点です。
これはSpring固有ではなくJavaの話になりますが、この操作は、新しい空のインスタンスを変数に代入することで、元々入っていたオブジェクトを捨てています。
一般的に、変数の再代入・再利用は避けるのが賢明です。(数値の場合の+=などは例外)

とりあえず下記のようにすれば表示できます。
意図的にリダイレクトをしたいのでなければ、これでできるようになります。

// mav = new ModelAndView("redirect:/login");

// redirect:/firstを有効にするために、elseブロックの最後に移動してください
mav.setViewName("login");

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/29 18:41

    ご回答して頂きありがとうございます。
    mav = new ModelAndView("redirect:/login");
    を削除し、else文の最後に
    mav.setViewName("login");
    を記載したところ無事、検索結果が表示されました。
    お忙しい中、ありがとうございました。

    キャンセル

0

HeloController の 

mav =new ModelAndView("redirect:/login");

の行が不要ではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/08/29 18:40

    ご回答して頂きありがとうございます。
    mav = new ModelAndView("redirect:/login");
    を削除し、else文の最後に
    mav.setViewName("login");
    を記載したところ無事、検索結果が表示されました。
    お忙しい中、ありがとうございました。

    キャンセル

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

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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