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

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

ただいまの
回答率

90.32%

  • Spring

    738questions

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

数値を呼び出して比較がしたいです。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 198

akuram

score 2

ショッピングサイトのかごシステムを作っていまして、
個数を指定、次の画面に遷移した際に在庫が足りなければエラーページに行かせたいです。
しかし、比較がうまくいかず、以下の文では文字列を演算子で処理できないと出ます。

@Controller
public class OrderRegistCustomerContoller {

    @Autowired
    HttpSession session;

    @Autowired
    OrderItemRepository orderItemRepository;

    @Autowired
    OrderRepository orderRepository;

    @Autowired
    UserRepository userRepository;

    @RequestMapping(path = "/address/input", method = RequestMethod.POST)
    public String oderRegistAddressInput(Model model, @ModelAttribute BasketForm basketForm, UserForm userForm){
        Order order = orderRepository.getOne(userForm.getId());
        OrderBean orderBean = new OrderBean();

        BeanUtils.copyProperties(order, orderBean);

        model.addAttribute("order", orderBean);

/**
ここで比較しようとしています。
*/

        if("${Basket.stock}"<="${item.stock}"){
            return "order/regist/address_input";
        }
    }

}
<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org"
  xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
  layout:decorator="common/layout_5block">
<head></head>
<body class="user shopping_basket">
  <th:block layout:fragment="layout-main" >
    <h2 class="title" >買い物かご</h2>
        <div  th:if="${session.basketList == 1}">
            <p>現在、お客様の買い物かごには商品がありません。商品をお選びください。</p>
        </div>
      <table class="list_table basket" th:if="${session.basketList == 0}">
        <tr>
          <th>商品名</th>
          <th>個数</th>
          <th>操作</th>
        </tr>

          <tr th:each = "Basket: ${session.basket}">
          <td><a th:href="@{/item/detail/{id}(id=${Basket.id})}" th:text = "${Basket.name}" ></a></td>
          <td th:text = "${Basket.stock}"></td>
          <td >
            <form method="post" th:action="@{/basket/subtractcount}">
              <input type="hidden" name="id" th:value="${Basket.id}" />
              <input type="hidden" name="orderNum" th:value="${Basket.stock}" />
              <input type="submit" value="個数-1" />
            </form>
            <form method="post" th:action="@{/basket/addcount}">
              <input type="hidden" name="id" th:value="${Basket.id}" />
              <input type="hidden" name="orderNum" th:value="${Basket.stock}" />
              <input type="submit" value="個数+1" />
            </form>
            <form method="post" th:action="@{/basket/delete}">
              <input type="hidden" name="id" th:value="${Basket.id}" />
              <input type="submit" value="削除" class="delete" />
            </form>
          </td>
        </tr>
      </table>


      <div class="user_info_form_area" th:if="${session.basketList == 0}">

        <form method="post" th:action="@{/address/input}" >
          <span>
            <input type="hidden" name="itemId" value="1" />
            <input type="hidden" name="orderNum" value="1" />
            <input type="hidden" name="id" th:value="${session.user.id}" />
          </span>
          <input type="submit" value="ご注文のお手続き" />
        </form>

        <form method="post" th:action="@{/basket/allDelete/}">
          <input type="submit" value="買い物かごを空にする" class="delete" />
         </form>
      </div>
    </th:block>
</body>
</html>
<!DOCTYPE html>

<html xmlns:th="http://www.thymeleaf.org"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
    layout:decorator="common/layout_5block">
<head>
    <title>お届け先入力 </title>
</head>
<body class="user order_list">
    <th:block layout:fragment="layout-main">
        <h2 class="title">お届け先入力</h2>
        <div class="user_info_form_area">
            <form method="post" th:action="@{/payment/input}">
                <ul class="input_list">
                    <li>
                        <label>
                            <span class="input_title">郵便番号</span>
                            <input type="text" name="postalCode" th:value="${order.postalCode}" />
                        </label>

                    </li>
                    <li>
                        <label>
                            <span class="input_title">住所</span>
                            <textarea name="address" rows="6" th:text="${order.address}"></textarea>
                        </label>

                    </li>
                    <li>
                        <label>
                            <span class="input_title">氏名</span>
                            <input type="text" name="name" th:value="${order.name}" />
                        </label>

                    </li>
                    <li>
                        <label>
                            <span class="input_title">電話番号</span>
                            <input type="text" name="phoneNumber" th:value="${order.phoneNumber}" />
                        </label>

                    </li>
                </ul>
                <input type="hidden" name="id" th:value="${session.user.id}" />
                <input type="submit" value="次へ" class="send_button" />
            </form>
            <form th:action="@{/basket/list/1}">
                <input type="submit" value="戻る" class="back_button" />
            </form>
        </div>


</th:block>
</body>
</html>
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
    layout:decorator="common/layout_4block">
<head>
<title>商品詳細</title>
</head>
<body class="user item_detail">
    <th:block layout:fragment="layout-main">
        <h2 class="title">商品詳細</h2>
        <div class="item_info_form_area">
            <div class="item_detail_area">
                <div class="item_image_area">
                    <span th:if="${item.image != null}">
                        <img th:src="@{/img/{image}(image=${item.image})}"></img>
                    </span>
                    <span th:if="${item.image == null}">
                        <img th:src="@{/img/common/no_image.jpg}"></img>
                    </span>
                </div>
                <dl class="item_detail_list">
                    <dt>商品名:</dt>
                    <dd th:text="${item.name}"></dd>
                    <dt>価格:</dt>
                    <dd th:text="${item.price}"></dd>
                    <dt>在庫:</dt>
                    <dd th:text="${item.stock}" th:if = "${item.stock != 0}"></dd>
                    <dd th:text="在庫なし" th:if = "${item.stock == 0}"></dd>
                    <dt>カテゴリ:</dt>
                    <dd th:text="${item.category.name}"></dd>
                    <dt>説明:</dt>
                    <dd th:text="${item.description}"></dd>
                </dl>
            </div>
            <form method="post" class="user_info_form" th:action="@{/basket/add}">
                <input type="hidden" name="id" th:value="${item.id}" />
                <input type="hidden" name="name" th:value="${item.name}" />
                <input type="submit" value="買い物かごに入れる" class="send_button" />
            </form>
            <form th:action="@{/}">
                <input type="submit" value="戻る"  class="back_button" />
            </form>
        </div>    </th:block>

</body>
</html>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • mts10806

    2018/06/18 11:48

    提示のコードはどこにどのように書かれているのでしょうか。もう少しコード全体の流れなどがわかる範囲で提示いただけますか?

    キャンセル

  • mts10806

    2018/06/18 11:49

    それぞれをきちんと数値型に変換できればいいとかそういう意味ではないのでしょうか?「文字列を演算子で処理できない」というのは質問者さんが書かれたものですよね。実際のエラーメッセージ原文を提示してください。

    キャンセル

  • akuram

    2018/06/18 12:26

    コードを記述しました。

    キャンセル

回答 1

checkベストアンサー

+1

akuramさんは、SpringBootお使いのようですが 変数について使い分けを混乱していらっしゃるようです。

今回のプログラムにおいて Javaで記述している箇所と HTMLを書いている箇所がありますよね。

    @RequestMapping(path = "/address/input", method = RequestMethod.POST)
    public String oderRegistAddressInput(Model model, @ModelAttribute BasketForm basketForm, UserForm userForm){
        ... 省略 ...
        model.addAttribute("order", orderBean);
/**
ここで比較しようとしています。
*/

        if("${Basket.stock}"<="${item.stock}"){
            return "order/regist/address_input";
        }
    }
   <form method="post" th:action="@{/basket/subtractcount}">
              <input type="hidden" name="id" th:value="${Basket.id}" />
              <input type="hidden" name="orderNum" th:value="${Basket.stock}" />
              <input type="submit" value="個数-1" />
   </form>

Javaの中で下記のように比較しようとしてエラーとのことですが

    if("${Basket.stock}"<="${item.stock}"){
            return "order/regist/address_input";
        }

${Basket.stock}の様な書き方は Javaでの記述方法ではなくて HTML側で記述する方法(Thymeleafの書き方)になります。従ってJavaでは変数として認識できないのです。
Javaで${Basket.stock}同じ値を参照しようとした場合は、@ModelAttribute BasketForm basketForm で示されている変数を使用して basketForm.stock になります。

これだけでは正しく動かないのですが、確認点2点を記します。
比較対象の item.stock にあたるJava側の変数が見当たりません。
またjava側に渡された値が文字列なのであれば、これを数値に変換する必要があります。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/06/18 13:07

    数値に変換する必要があるのですね?ありがとうございます。

    キャンセル

  • 2018/06/18 13:42

    解決しました。ありがとうございました。

    キャンセル

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

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

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

  • Spring

    738questions

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