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

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

ただいまの
回答率

90.00%

springbootの検索機能について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,788

heavyuseman

score 40

前提・実現したいこと

springbootで会員検索画面を作成しています。
使用しているDBはMysqlです。
DB上のカラムはID,名前,メモです。
会員検索画面で名前とメモのテキストボックスに値を入力して、ボタンを押下したら
画面上に検索した情報が表示したいです。
名前とメモのテキストボックスに値を入力して、ボタンを押下したらエラーが発生しましたが、原因は何でしょうか?
ご回答のほど宜しくお願い致します

エラーメッセージ
ModelAndView: reference to view with name 'first'; model is {title=Find Page, msg=サンプルです, value=, datalist=[com.tuyano.springboot.MyDataMongo@5d599aec, com.tuyano.springboot.MyDataMongo@435785a9, com.tuyano.springboot.MyDataMongo@1104fe83, com.tuyano.springboot.MyDataMongo@1665bf7c, com.tuyano.springboot.MyDataMongo@7b9d0875, com.tuyano.springboot.MyDataMongo@418b062, com.tuyano.springboot.MyDataMongo@325eb684, com.tuyano.springboot.MyDataMongo@97b71ec, com.tuyano.springboot.MyDataMongo@1a361e16, com.tuyano.springboot.MyDataMongo@5bec2692, com.tuyano.springboot.MyDataMongo@1cc151fd, com.tuyano.springboot.MyDataMongo@4e67a798, com.tuyano.springboot.MyDataMongo@640bd6ec, com.tuyano.springboot.MyDataMongo@483148d0, com.tuyano.springboot.MyDataMongo@3b996d29, com.tuyano.springboot.MyDataMongo@11f6000]}
paramcom.tuyano.springboot.MyDataMongo@14118e06
2016-08-27 11:48:16.929 ERROR 819 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [com.tuyano.springboot.MyDataMongo@14118e06] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [com.tuyano.springboot.MyDataMongo@14118e06] did not match expected type [java.lang.String (n/a)]] with root cause

java.lang.IllegalArgumentException: Parameter value [com.tuyano.springboot.MyDataMongo@14118e06] did not match expected type [java.lang.String (n/a)]
    at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:897) ~[hibernate-entitymanager-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.jpa.internal.QueryImpl.access$000(QueryImpl.java:61) ~[hibernate-entitymanager-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.jpa.internal.QueryImpl$ParameterRegistrationImpl.bindValue(QueryImpl.java:235) ~[hibernate-entitymanager-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:638) ~[hibernate-entitymanager-5.0.9.Final.jar:5.0.9.Final]
    at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:163) ~[hibernate-entitymanager-5.0.9.Final.jar:5.0.9.Final]
・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);
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 memo;
//private Date date;
public MyDataMongo(String name, String memo) {
    super();
    this.name=name;
    this.memo=memo;
}

//public void setId(Long id){

//    this.id=id;

//}

public Long getId(){

    return id;

}


public String getName(){

    return name;

}





public String getMemo(){

    return memo;

}






}
<!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="first" size="20" th:value="${value}"/></td></tr>
 <tr><td>パスワード</td>
 <td><input type="text" name="first" 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>
   <td th:text="${obj.memo}"></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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • argius

    2016/08/27 23:29

    私もあまり自信が無いのですが、findByName(MyDataMongo mydatamongo)という書き方は何を参考にしたのですか? エラーはこの方法が使えないことを示唆しているように思います。

    キャンセル

  • heavyuseman

    2016/08/28 13:36

    ご回答して頂きありがとうございます。書き方は主に所有しておりますspringbootの書籍を参考しております。
    ・HeloControlle.java
    ・MyDataMongoRepository.java
    を修正し、正常に検索できるようになりました。
    修正した箇所の修正はコードに記載しております。
    お忙しい中ご回答して頂きありがとうございました

    キャンセル

  • argius

    2016/08/28 14:21

    Stringに変えたのですね。元の方法は本当に使えないのかどうか自信がありませんので、回答しないでおきます。
    質問が付かずに解決された場合は、お手数ですが、質問者様ご自身で質問のクローズをお願いします。
    質問の下部にある「自己解決方法を記入する」で解決した方法を書いて投稿すれば、クローズできます。

    キャンセル

  • heavyuseman

    2016/08/28 14:23

    了解しました。ではこちらでクローズしておきますね

    キャンセル

回答 1

check解決した方法

0

MyDataMongoRepository.java をString型に変更して対応いたしました

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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