質問編集履歴

1 文章の修正

usako

usako score 25

2019/05/30 16:32  投稿

参照画面を作成していますが、コンパイルエラーがとれません・・・
### 前提・実現したいこと
閲覧いただき、ありがとうございます。
Eclipse,Springを使ってJAVAの勉強をしている(超)初心者です。
元々、受講していた通信教育の課題がDBを使用しておらず、
内部にテーブルを保持している構造だったので、それを
MySQL,JDBCで外部化しようとしています。
一覧表示、更新、参照機能だけのシンプルな画面です。
内部テーブルを参照していたところを、DBに問合わせするよう
修正しているのですが、コンパイルエラーがとれません。
無理やりキャストするとコンパイルは通るのですが、
ClassCastExceptionが発生してしまいます。
根本的にロジックが間違っているのかもしれないのですが、
どこがどうおかしいのかもわかりません。
どなたかご教示いただけないでしょうか。
### 発生している問題・エラーメッセージ
AddressBookController.javaの★の個所でコンパイルエラーと
なります。
メソッドgetName()型List<Map<String,Object>>で未定義です
メソッドgetPhone()型List<Map<String,Object>>で未定義です
メソッドgetAddress()型List<Map<String,Object>>で未定義です
### 該当のソースコード
```java
(AddressBookController.java)
package jp.practice.address;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "/book")
public class AddressBookController {
   private static final String INIT  = "init";
   private static final String REFER = "refer";
   private static final String UPDATE = "update";
   private static final String LIST  = "list";
   private static final String INIMSG = "従業員番号を入力してください";
   private static final String REFMSG = "情報が取得できました";
   private static final String UPDMSG = "情報を更新してください";
   private static final String ERRMSG = "該当するデータはありません";
   private RecordManager recordManager;
   public AddressBookController(RecordManager recordManager) {
       this.recordManager = recordManager;
   }
   @RequestMapping(value = "/start")
   public String init(AddressBookForm form, Model model) {
       model.addAttribute("message", INIMSG);
       return INIT;
   }
   @RequestMapping(params = "reference")
   public String refer(AddressBookForm form, Model model) {
//*start ***
       List<Map<String, Object>> list1 = recordManager.selectEmployee(form.getId());
       if (list1 != null) {
★           form.setName(list1.getName());
★           form.setPhone(list1.getPhone());
★           form.setAddress(list1.getAddress());
//       Employee employee = RecordManager.selectEmployee(form.getId());
//       if (employee != null) {
//           form.setName(employee.getName());
//           form.setPhone(employee.getPhone());
//           form.setAddress(employee.getAddress());
//*e n d
           model.addAttribute("message", REFMSG);
           return REFER;
       } else {
           model.addAttribute("message", ERRMSG);
           return INIT;
       }
   }
   ----------割愛--------------
   @RequestMapping(params = "toInit")
   public String toInit(AddressBookForm form, Model model) {
       model.addAttribute("message", INIMSG);
       return INIT;
   }
}
```
```java
(AddressBookForm.java))
package jp.practice.address;
public class AddressBookForm {
   private String id;
   private String name;
   private String phone;
   private String address;
   public AddressBookForm() {
   }
   /**
    * @return id
    */
   public String getId() {
       return id;
   }
   /**
    * @param id セットする id
    */
   public void setId(String id) {
       this.id = id;
   }
   /**
    * @return name
    */
   public String getName() {
       return name;
   }
   /**
    * @param name セットする name
    */
   public void setName(String name) {
       this.name = name;
   }
   /**
    * @return phone
    */
   public String getPhone() {
       return phone;
   }
   /**
    * @param phone セットする phone
    */
   public void setPhone(String phone) {
       this.phone = phone;
   }
   /**
    * @return address
    */
   public String getAddress() {
       return address;
   }
   /**
    * @param address セットする address
    */
   public void setAddress(String address) {
       this.address = address;
   }
}
```
```java
(Employee.java)
package jp.practice.address;
public class Employee {
   private String id;
   private String name;
   private String phone;
   private String address;
   /**
    * @param id
    * @param name
    * @param phone
    * @param address
    */
   public Employee(String id, String name, String phone, String address) {
       this.id = id;
       this.name = name;
       this.phone = phone;
       this.address = address;
   }
   /**
    * @return id
    */
   public String getId() {
       return id;
   }
   /**
    * @param id セットする id
    */
   public void setId(String id) {
       this.id = id;
   }
   /**
    * @return name
    */
   public String getName() {
       return name;
   }
   /**
    * @param name セットする name
    */
   public void setName(String name) {
       this.name = name;
   }
   /**
    * @return phone
    */
   public String getPhone() {
       return phone;
   }
   /**
    * @param phone セットする phone
    */
   public void setPhone(String phone) {
       this.phone = phone;
   }
   /**
    * @return address
    */
   public String getAddress() {
       return address;
   }
   /**
    * @param address セットする address
    */
   public void setAddress(String address) {
       this.address = address;
   }
   /* (非 Javadoc)
    * @see java.lang.Object#hashCode()
    */
   @Override
   public int hashCode() {
       final int prime = 31;
       int result = 1;
       result = prime * result + ((id == null) ? 0 : id.hashCode());
       return result;
   }
   /* (非 Javadoc)
    * @see java.lang.Object#equals(java.lang.Object)
    */
   @Override
   public boolean equals(Object obj) {
       if (this == obj) {
           return true;
       }
       if (obj == null) {
           return false;
       }
       if (!(obj instanceof Employee)) {
           return false;
       }
       Employee other = (Employee) obj;
       if (id == null) {
           if (other.id != null) {
               return false;
           }
       } else if (!id.equals(other.id)) {
           return false;
       }
       return true;
   }
}
```
```java
(Employee.java)
(RecordManager.java)
package jp.practice.address;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class RecordManager {
   private JdbcTemplate jdbcTemplate;
//   /** 初期値データ */
   private static List<Employee> list = new ArrayList<>();
   static {
   }
   public RecordManager(JdbcTemplate jdbcTemplate) {
       this.jdbcTemplate = jdbcTemplate;
   }
   /**
    * 指定したID のレコードを取得
    *
    * @param id
    *           従業員番号
    * @return Employee
    */
/**start ****/
//   public static Employee selectEmployee(String id) {
   public List<Map<String, Object>> selectEmployee(String id) {
       System.out.println("step1");
       List<Map<String, Object>> list1 = jdbcTemplate.queryForList("select * from unit02.addressbook where id = '200101'");
       System.out.println("step2");
       System.out.println("list1=" + list1);
       return list1;
//       int index = list.indexOf(new Employee(id, "", "", ""));
//       if (index < 0) {
//           return null;
//       }
//       return list.get(index);
/**e n d*/
   }
   /**
    * 指定した従業員情報を反映
    *
    * @param emp
    *           従業員情報
    */
   public static void updateEmployee(Employee emp) {
       int index = list.indexOf(emp);
       list.set(index, emp);
   }
   public List<Map<String, Object>> getEmployeeList() {
       List<Map<String, Object>> list1 = jdbcTemplate.queryForList("select * from unit02.addressbook order by id");
   return list1;
   }
}
```
### 試したこと
クイック・フィックス機能で(Employee)や(AddressBookForm)にキャスト
してみましたが、実行時にClassCastExceptionが発生してしまいます。
  • Java

    18636 questions

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

  • Spring

    1045 questions

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

  • JDBC

    159 questions

    JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る