質問内容
プログラミング初心者です。
springを現在使用しており、ビーンから情報を取ることに苦戦しています。。。
皆さんのお力をお貸しいただけると幸いです。
コード
**ビーン**
package jp.co.sss.shop.bean;
/**
* 会員情報クラス
*
* @author SystemShared
*/
public class UserBean {
/**
* 会員ID
*/
private Integer id;
/**
* 会員メールアドレス
*/
private String email;
/**
* パスワード
*/
private String password;
/**
* 会員名
*/
private String name;
/**
* 郵便番号
*/
private String postalCode;
/**
* 住所
*/
private String address;
/**
* 電話番号
*/
private String phoneNumber;
/**
* 権限
*/
private Integer authority;
/**
* 削除フラグ 0:未削除、1:削除済み
*/
private Integer deleteFlag;
/**
* 登録日付
*/
private String insertDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Integer getAuthority() {
return authority;
}
public void setAuthority(Integer authority) {
this.authority = authority;
}
public Integer getDeleteFlag() {
return deleteFlag;
}
public void setDeleteFlag(Integer deleteFlag) {
this.deleteFlag = deleteFlag;
}
public String getInsertDate() {
return insertDate;
}
public void setInsertDate(String insertDate) {
this.insertDate = insertDate;
}
}
**コントローラ**
package jp.co.sss.shop.controller.order;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import jp.co.sss.shop.bean.OrderBean;
import jp.co.sss.shop.bean.OrderItemBean;
import jp.co.sss.shop.bean.UserBean;
import jp.co.sss.shop.entity.Order;
import jp.co.sss.shop.entity.OrderItem;
import jp.co.sss.shop.form.OrderShowForm;
import jp.co.sss.shop.repository.OrderRepository;
import jp.co.sss.shop.util.PriceCalc;
/**
* 注文管理 一覧表示機能(一般用)のコントローラクラス
*
* @author SystemShared
*/
@Controller
public class OrderShowCustomerController {
/**
* 注文情報
*/
@Autowired
OrderRepository orderRepository;
/**
* セッション
*/
@Autowired
HttpSession session;
/**
* 注文情報一覧表示処理
*
* @param model
* Viewとの値受渡し
* @param form
* 表示用注文情報
* @param session
* セッション情報
* @param pageable
* ページング情報
* @return "order/list/order_list_admin" 注文情報 一覧画面へ
*/
@RequestMapping(path = "/order/list", method = RequestMethod.GET)
public String showOrderList(Model model, @ModelAttribute OrderShowForm form,
Pageable pageable) {
// ログイン中のユーザの注文情報を取得
UserBean userBean = new UserBean();
userBean.setId(getInteger(id));
Page<Order> orderList = orderRepository.findByUserIdOrderByInsertDateDesc(id, pageable);
// 注文情報リストを生成
List<OrderBean> orderBeanList = new ArrayList<OrderBean>();
for (Order order : orderList){
OrderBean orderBean = new OrderBean();
orderBean.setId(order.getId());
orderBean.setUserName(order.getUser().getName());
orderBean.setInsertDate(order.getInsertDate().toString());
orderBean.setPayMethod(order.getPayMethod());
//注文時点の単価を合計するための一時変数
int total = 0;
//orderレコードから紐づくOrderItemのListを取り出す
List<OrderItem> orderItemList = order.getOrderItemsList();
for(OrderItem orderItem : orderItemList) {
//購入時単価 * 買った個数をもとめて、合計に加算
total += ( orderItem.getPrice() * orderItem.getQuantity() );
}
//Orderに改めて注文時点の単価をセット
orderBean.setTotal(total);
orderBeanList.add(orderBean);
}
// 注文情報リストをViewへ渡す
model.addAttribute("pages", orderList);
model.addAttribute("orders", orderBeanList);
model.addAttribute("url", "/order/list");
return "order/list/order_list";
}
**リポジトリ**
package jp.co.sss.shop.repository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import jp.co.sss.shop.entity.Order;
import jp.co.sss.shop.util.JPQLConstant;
/**
* ordersテーブル用リポジトリ
*
* @author System Shared
*/
@Repository
public interface OrderRepository extends JpaRepository<Order, Integer> {
Order findTop1ByOrderByInsertDateDesc();
// 会員IDに該当する注文情報を注文日付順で検索
Page<Order> findByUserIdOrderByInsertDateDesc(int userId, Pageable pageable);
**ログイン**
package jp.co.sss.shop.validator;
import javax.servlet.http.HttpSession;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.BeanWrapperImpl;
import org.springframework.beans.factory.annotation.Autowired;
import jp.co.sss.shop.annotation.LoginCheck;
import jp.co.sss.shop.bean.UserBean;
import jp.co.sss.shop.entity.User;
import jp.co.sss.shop.repository.UserRepository;
import jp.co.sss.shop.util.Constant;
/**
* ログインチェックの独自検証クラス
*
* @author System Shared
*/
public class LoginValidator implements ConstraintValidator<LoginCheck, Object> {
private String email;
private String password;
@Autowired
UserRepository userRepository;
@Autowired
HttpSession session;
@Override
public void initialize(LoginCheck annotation) {
this.email = annotation.fieldEmail();
this.password = annotation.fieldPassword();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
BeanWrapper beanWrapper = new BeanWrapperImpl(value);
String email = (String) beanWrapper.getPropertyValue(this.email);
String password = (String) beanWrapper.getPropertyValue(this.password);
User user = userRepository.findByEmailAndDeleteFlag(email, Constant.NOT_DELETED);
if (user != null && password.equals(user.getPassword())) {
UserBean userBean = new UserBean();
userBean.setId(user.getId());
userBean.setName(user.getName());
userBean.setAuthority(user.getAuthority());
// セッションスコープにログインしたユーザの情報を登録
session.setAttribute("user", userBean);
return true;
}
else {
return false;
}
}
}
エラー内容
コントローラーのidが2つとも(idを変数に解決できません)というエラーが出る状態です。
またゴール地点としては
セッションに登録されたidの情報のみ取ってくる事ができたらと思っています。
説明下手ですみません。また現状のコードの書き方の違いや違和感などありましたらご指摘お願いします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
質問の仕方が悪かったのですが
Page<Order> orderList = orderRepository.findByUserIdOrderByInsertDateDesc(((UserBean) session.getAttribute("user")).getId(), pageable);
に修正したら無事に動作しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2019/11/14 10:00
コードはマークダウンのcode機能を利用してご提示ください
m.ts10806
2019/11/14 10:01
あと、内部のコードだけでなくできればpackageも含めて全体ご提示ください
satesate
2019/11/14 10:12
すみません。修正致します。
m.ts10806
2019/11/14 10:15
怒っているわけではないので淡々といきましょう。
satesate
2019/11/14 10:24
修正致しました。
サイトを使うのがまだ数回目だったのでご指摘いただき感謝しております。
また不足している点などありましたらご指摘お願いします。