<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>留学生のKIMAGUREブログ</title>
<link>https://ameblo.jp/arikah2019/</link>
<atom:link href="https://rssblog.ameba.jp/arikah2019/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>好きなことを書いてます。</description>
<language>ja</language>
<item>
<title>SB応用 Session</title>
<description>
<![CDATA[ <p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/9d/a9/p/o0400053814863802052.png"><img alt="" contenteditable="inherit" height="161" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/9d/a9/p/o0400053814863802052.png" width="120"></a></p><p>SessionはWebを訪れたユーザのデータを個別に維持することで</p><p>ユーザとWebの状態を管理する仕組みを提供するものである。</p><p>.....と言われてもわからないだろう。</p><p>&nbsp;</p><p>簡単にいうと、Sessionを利用することで</p><p>ユーザ毎に特定のデータを保持することができるっていうことである。</p><p>例えば、ショッピングカートに入れたものを一時保存など。</p><p>&nbsp;</p><p>Sessionでは次のものが必要になる</p><p>１。Sessionの格納</p><p>２。Sessionの取り出し</p><p>&nbsp;</p><p>Sessionでは入路な処理でログインしているユーザの情報が必要となる。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/3c/a5/p/o1358067614863802263.png"><img alt="" contenteditable="inherit" height="309" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/3c/a5/p/o1358067614863802263.png" width="620"></a></p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/06/c6/p/o1352041814863802393.png"><img alt="" contenteditable="inherit" height="192" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/06/c6/p/o1352041814863802393.png" width="620"></a></p><p>２回目の＠RequestMappingは初回のアクセスならアカウントを検索して</p><p>session.setAttributeでセッションに格納するという役割を担っている。</p><p>第一引数には格納するものの名前</p><p>第二引数はvalue（格納するもの）を指定している。</p><p>つまり、この場合はaccountという名前で取得したAccountのEntityを格納している。</p><p>&nbsp;</p><p>ここをしっかり理解して欲しい。</p><p>それぞれ赤色で書いてあるところが理解できないと、次も難しい。</p><p>&nbsp;</p><p>では理解した上で、Sessionの取り出しをどうするのか。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/e8/4e/p/o1362089014863802587.png"><img alt="" contenteditable="inherit" height="405" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/e8/4e/p/o1362089014863802587.png" width="620"></a></p><p>ここではsession.getAttributeによって</p><p>セッションに格納されているvalueを取り出している。</p><p>また、取り出したAccountのEntityからAccountIDを取り出して利用している。</p><p>&nbsp;</p><p>session.setAttributeでどうセッションに格納するされていて</p><p>session.getAttributeによってセッションに格納されているvalueを取り出しているのか</p><p>しっかり理解してから次に進んで欲しいと思う。</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642956100.html</link>
<pubDate>Wed, 09 Dec 2020 11:53:10 +0900</pubDate>
</item>
<item>
<title>SB応用 Security</title>
<description>
<![CDATA[ <p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/62/2f/p/o0230035214863801228.png"><img alt="" contenteditable="inherit" height="169" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/62/2f/p/o0230035214863801228.png" width="110"></a></p><p>近代DXが進む中、注目すべきことはセキュリティ。</p><p>なのでSpring Securityがある。</p><p>&nbsp;</p><p>Spring Securityを使うことでWebアプリケーションに</p><p>セキュリティ機能の追加ができる。</p><p>利点は、簡単に導入できアップデートに対応しやすくなるということ。</p><p>&nbsp;</p><p>Spring Securityの主な機能は</p><p>１。認証・認可：ログイン機能の提供、ユーザーアクセス制御・認可</p><p>２。セッション管理：ライフサイクル管理、二重ログイン防止</p><p>３。セキュリティ用ヘッダ：セキュリティ関連のレスポンスヘッダの制御を提供</p><p>４。CSRF対策：クロスサイトリクエストフォージェリの対策を提供</p><p>５。ファイアウォール：不正URLの検知機能を提供</p><p>の5つである。</p><p>&nbsp;</p><p>特に理解して欲しいのは認証・認可とセッション管理である。</p><p>&nbsp;</p><p>まず最初に、認証と認可は違うものだということを覚えて欲しい。</p><p>認証とはそのユーザーが誰かを確認・証明するもので</p><p>認可はユーザーがその画面にアクセス権限があるかを判定するものである。</p><p>つまり、ログインしていないでどっかの画面を見ようと思った際に</p><p>強制的にログイン画面に飛ぶ、、これは認可がおきているからである。</p><p>&nbsp;</p><p>具体的な設定内容はこうなる。</p><p>１。pom.xmlにSpringSecurityの依存を設定</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/74/4a/p/o1358047614863801401.png"><img alt="" contenteditable="inherit" height="217" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/74/4a/p/o1358047614863801401.png" width="620"></a></p><p>２。WebSecurityConfigクラスでSpringSecurityの設定を定義</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/4d/c1/p/o1340062414863801604.png"><img alt="" height="196" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/4d/c1/p/o1340062414863801604.png" width="420"></a><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/5e/71/p/o1338041614863801701.png"><img alt="" height="131" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/5e/71/p/o1338041614863801701.png" width="420"></a></p><p>http.authorizeRequests()：全ユーザーアクセスを許可する（ログインページなど） http.formLogin()：ログインの処理URLや成功時・失敗時の移動先指定設定 http.logout()：ログアウトの処理URLやログアウト時のセッション削除設定</p><p>&nbsp;</p><p>この三つを覚えればまず大丈夫。</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642955685.html</link>
<pubDate>Wed, 09 Dec 2020 11:50:29 +0900</pubDate>
</item>
<item>
<title>SB応用　TODO管理システム　検索処理</title>
<description>
<![CDATA[ <p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/59/ac/p/o0356035614863800952.png"><img alt="" contenteditable="inherit" height="220" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/59/ac/p/o0356035614863800952.png" width="220"></a></p><p>まず、検索するには何がいるかを考える。</p><p>そうするとわかる。</p><p>１。init処理の実装</p><p>２。検索処理の実装</p><p>この二つが必要だ。</p><p>&nbsp;</p><p>ではどのファイルを編集する必要があるのか。</p><p>AccountRepository:findAllAccountメソッド</p><p>AccountSearchController:searchInitメソッドとsearchメソッド</p><p>accountSearchForm:登録、更新、検索条件の入力欄</p><p>アカウントを探すために必要なものと機能である。</p><p>&nbsp;</p><p>１。init処理の実装では</p><p>Controllerで#searchInit()の実装とそれに伴って必要な</p><p>accountSearchFormの実装。</p><p>２。検索処理の実装</p><p>データを取得するSQLを作成</p><p>Repositoryで#findAllAccount()の実装</p><p>Controllerで#search()の実装とそれに伴って必要な</p><p>accountSearchFormの実装。</p><p>&nbsp;</p><p>前回言ったように</p><p>考えてから行動するだけで何をするべきか</p><p>どこと何をつなげるかを明確にできる。</p><p>&nbsp;</p><p>それだけで時間の短縮ができる。</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642955231.html</link>
<pubDate>Wed, 09 Dec 2020 11:47:35 +0900</pubDate>
</item>
<item>
<title>SB応用　TODO管理システム　更新と削除処理</title>
<description>
<![CDATA[ <p>まず、TODO管理システムとは。</p><p>&nbsp;</p><p>TODO管理システムには主に4つの機能があり</p><p>１。ログイン・ログアウト機能：ログインすることでTODO管理システム利用可</p><p>２。アカウント機能：登録、更新、退会など</p><p>３。TODO機能：TODOの登録や一覧検索、詳細表示</p><p>４。コメント機能：TOP画面のつぶやきからtwitterのようにコメントが投稿される</p><p>である。</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a5/61/p/o0416026814863800116.png"><img alt="" contenteditable="inherit" height="142" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a5/61/p/o0416026814863800116.png" width="220"></a></p><p>まず、更新処理。</p><p>更新処理をするためには何が必要か。大まかに分けると3つあると言える。</p><p>１。Init処理の実装</p><p>２。確認処理の実装</p><p>３。登録処理の実装</p><p>&nbsp;</p><p>ではそれをするために何が必要になるのか。</p><p>Controller上ではそれぞれ</p><p>１。updateInitメソッド</p><p>２。confirmメソッド</p><p>３。doUpdateメソッド</p><p>が必要となる。だからそれを作る。</p><p>&nbsp;</p><p>ただ、ここで見落としてはいけないの</p><p>更新しようとしているIDが重複していてはダメだということだ。</p><p>だから、それを確認するために登録処理の前にチェックする。</p><p>Service上でAccountUpdateServiceを、</p><p>Form上でaccountUpdateFormを編集する。</p><p>&nbsp;</p><p>また、アップデートをした後に確認画面がいる。</p><p>そのためForm上でaccountUpdateConfirmFormを編集する必要もある。</p><p>&nbsp;</p><p>たったこれだけだ。</p><p>これだけで更新ができてしまうようになる。</p><p>&nbsp;</p><p>つまり何を作ればいいのか。</p><p>１。updateInitメソッドには</p><p>まず"/init"でリクエストをマッピングする必要がある。</p><p>その後に、どうやってアカウントの最新情報をDBから取得するのか</p><p>取得したアカウントをModelに格納して画面に表示するのかを</p><p>考える必要があると言えるだろう。</p><p>２。confirmメソッド</p><p>まず"/confirm"でリクエストをマッピングする必要がある。</p><p>BeanValidationを行い入力されたもののチェックを行い</p><p>それをパスしたらさっき述べたように確認画面の表示をする。</p><p>３。doUpdateメソッド</p><p>BeanValidationを行い更新情報の内容を設定する。</p><p>&nbsp;</p><p>何を作る必要があり、どこを動かす必要があるのかを</p><p>最初に考えるだけで効率が変わる、ということを覚えていて欲しい。</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/19/e2/p/o0560032214863800500.png"><img alt="" contenteditable="inherit" height="127" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/19/e2/p/o0560032214863800500.png" width="220"></a></p><p>では、次は削除処理だ。削除処理は更新処理と似てる。</p><p>更新処理をするためには</p><p>１。Init処理の実装</p><p>２。確認処理の実装</p><p>３。登録処理の実装</p><p>が必要だったと思うが削除処理も最初の2つは一緒だ。</p><p>違うのは３。削除処理である。</p><p>&nbsp;</p><p>３のために削除処理メソッドの実装が必要になる、</p><p>ただそれだけである。</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642955023.html</link>
<pubDate>Wed, 09 Dec 2020 11:46:25 +0900</pubDate>
</item>
<item>
<title>SB Thymeleafの使い方</title>
<description>
<![CDATA[ <p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/42/a8/p/o1404024614863799238.png"><img alt="" height="74" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/42/a8/p/o1404024614863799238.png" width="420"></a></p><p>&nbsp;</p><p>Thymeleafの使い方いまいちわからない〜て思っている人。</p><p>これを読めば大丈夫。</p><p>なんなら覚えなくてもこれ見れば大丈夫。</p><p>&nbsp;</p><p>このページでは</p><p>１。値の埋め込み</p><p>２。テキストの埋め込み</p><p>３。リンクの生成</p><p>４。繰り返し処理</p><p>５。条件の評価</p><p>６。エラーメッセージの出力</p><p>７。データをサーバーに送信する際に使用するタグ</p><p>について紹介する。</p><p>&nbsp;</p><p>１。値の埋め込み</p><p>Modelに格納された情報をThymeleaf内で使用することは</p><p>${Modelに格納した値の名称}をフォーマットとして使う。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/56/21/p/o1352016614863798207.png"><img alt="" contenteditable="inherit" height="76" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/56/21/p/o1352016614863798207.png" width="620"></a></p><p>&nbsp;</p><p>２。テキストの埋め込み</p><p>th:text="テキスト"のフォーマットを使う</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/f6/b7/p/o1354010814863798306.png"><img alt="" contenteditable="inherit" height="49" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/f6/b7/p/o1354010814863798306.png" width="620"></a></p><p>&nbsp;</p><p>３。リンクの生成</p><p>th:href = @{リンク}のフォーマットを使う</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/b3/fc/p/o1348011614863798462.png"><img alt="" contenteditable="inherit" height="53" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/b3/fc/p/o1348011614863798462.png" width="620"></a></p><p>&nbsp;</p><p>４。繰り返し処理(List/Mapを一要素ずつ取り出すとき）</p><p>th:each = "任意の変数名：%{Modelに格納したコレクション名}" のフォーマットを使う</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/4e/9d/p/o1352026614863798656.png"><img alt="" contenteditable="inherit" height="122" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/4e/9d/p/o1352026614863798656.png" width="620"></a></p><p>&nbsp;</p><p>５。条件の評価</p><p>th:if = "${条件}"のフォーマットを使う</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/67/ec/p/o1358042414863798772.png"><img alt="" contenteditable="inherit" height="194" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/67/ec/p/o1358042414863798772.png" width="620"></a></p><p>よく使うユニティーメソッド（<a href="https://www.wix.com/dashboard/e914e150-6d13-4e2f-a940-7e018d0d3293/blog/search/.hash.クラス名?compId=TPASection_ki9roq13&amp;origin=ADI-section&amp;instance=aLxuziP8jOMiUyu2zKsrn1ks-bDInUNg7l7kizMiq9I.eyJpbnN0YW5jZUlkIjoiODZlMGMyYzItMTFlYS00MWI0LWEyOTItMjE4MTBmZDkyZDM3IiwiYXBwRGVmSWQiOiIxNGJjZGVkNy0wMDY2LTdjMzUtMTRkNy00NjZjYjNmMDkxMDMiLCJtZXRhU2l0ZUlkIjoiZTkxNGUxNTAtNmQxMy00ZTJmLWE5NDAtN2UwMThkMGQzMjkzIiwic2lnbkRhdGUiOiIyMDIwLTEyLTA5VDAxOjU3OjUyLjE2OVoiLCJ1aWQiOiI2MjVmZjQzZi01NWQ2LTRmMDQtYTQ1MC1iODBiNzg0ODMyOTgiLCJwZXJtaXNzaW9ucyI6Ik9XTkVSIiwiZGVtb01vZGUiOmZhbHNlLCJvcmlnaW5JbnN0YW5jZUlkIjoiMmM1YzY1MDEtYTJiYi00NjgzLWI2MGQtNGRjMjJmMWZjYmZiIiwiYmlUb2tlbiI6IjZmZjQyMzkyLTdjZjktMGY5Yi0wYmQyLTVmODA4MmQ0MWZhNCIsInNpdGVPd25lcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4Iiwic2l0ZU1lbWJlcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4IiwiZXhwaXJhdGlvbkRhdGUiOiIyMDIwLTEyLTA5VDA1OjU3OjUyLjE2OVoiLCJsb2dpbkFjY291bnRJZCI6IjYyNWZmNDNmLTU1ZDYtNGYwNC1hNDUwLWI4MGI3ODQ4MzI5OCJ9&amp;viewMode=onboarding&amp;locale=ja&amp;appDefId=14bcded7-0066-7c35-14d7-466cb3f09103&amp;commonConfig=%7B%22brand%22%3A%22wix%22%7D&amp;cbi=%7B%22app_id%22%3A%2214bcded7-0066-7c35-14d7-466cb3f09103%22%2C%22evid%22%3A12%2C%22initiator%22%3A%22ADI%22%2C%22instance_id%22%3A%22602e5d56-fe27-4c12-879c-126c60570dc0%22%2C%22msid%22%3A%22e914e150-6d13-4e2f-a940-7e018d0d3293%22%2C%22ownerId%22%3A%22625ff43f-55d6-4f04-a450-b80b78483298%22%2C%22src%22%3A75%2C%22type%22%3A%22GFPP_MANAGE%22%7D" target="_self">#クラス名</a>.メソッド名)</p><p><a href="https://www.wix.com/dashboard/e914e150-6d13-4e2f-a940-7e018d0d3293/blog/search/.hash.string?compId=TPASection_ki9roq13&amp;origin=ADI-section&amp;instance=aLxuziP8jOMiUyu2zKsrn1ks-bDInUNg7l7kizMiq9I.eyJpbnN0YW5jZUlkIjoiODZlMGMyYzItMTFlYS00MWI0LWEyOTItMjE4MTBmZDkyZDM3IiwiYXBwRGVmSWQiOiIxNGJjZGVkNy0wMDY2LTdjMzUtMTRkNy00NjZjYjNmMDkxMDMiLCJtZXRhU2l0ZUlkIjoiZTkxNGUxNTAtNmQxMy00ZTJmLWE5NDAtN2UwMThkMGQzMjkzIiwic2lnbkRhdGUiOiIyMDIwLTEyLTA5VDAxOjU3OjUyLjE2OVoiLCJ1aWQiOiI2MjVmZjQzZi01NWQ2LTRmMDQtYTQ1MC1iODBiNzg0ODMyOTgiLCJwZXJtaXNzaW9ucyI6Ik9XTkVSIiwiZGVtb01vZGUiOmZhbHNlLCJvcmlnaW5JbnN0YW5jZUlkIjoiMmM1YzY1MDEtYTJiYi00NjgzLWI2MGQtNGRjMjJmMWZjYmZiIiwiYmlUb2tlbiI6IjZmZjQyMzkyLTdjZjktMGY5Yi0wYmQyLTVmODA4MmQ0MWZhNCIsInNpdGVPd25lcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4Iiwic2l0ZU1lbWJlcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4IiwiZXhwaXJhdGlvbkRhdGUiOiIyMDIwLTEyLTA5VDA1OjU3OjUyLjE2OVoiLCJsb2dpbkFjY291bnRJZCI6IjYyNWZmNDNmLTU1ZDYtNGYwNC1hNDUwLWI4MGI3ODQ4MzI5OCJ9&amp;viewMode=onboarding&amp;locale=ja&amp;appDefId=14bcded7-0066-7c35-14d7-466cb3f09103&amp;commonConfig=%7B%22brand%22%3A%22wix%22%7D&amp;cbi=%7B%22app_id%22%3A%2214bcded7-0066-7c35-14d7-466cb3f09103%22%2C%22evid%22%3A12%2C%22initiator%22%3A%22ADI%22%2C%22instance_id%22%3A%22602e5d56-fe27-4c12-879c-126c60570dc0%22%2C%22msid%22%3A%22e914e150-6d13-4e2f-a940-7e018d0d3293%22%2C%22ownerId%22%3A%22625ff43f-55d6-4f04-a450-b80b78483298%22%2C%22src%22%3A75%2C%22type%22%3A%22GFPP_MANAGE%22%7D" target="_self">#string</a>.isEmpty(name) //文字列が空かチェックする</p><p><a href="https://www.wix.com/dashboard/e914e150-6d13-4e2f-a940-7e018d0d3293/blog/search/.hash.lists?compId=TPASection_ki9roq13&amp;origin=ADI-section&amp;instance=aLxuziP8jOMiUyu2zKsrn1ks-bDInUNg7l7kizMiq9I.eyJpbnN0YW5jZUlkIjoiODZlMGMyYzItMTFlYS00MWI0LWEyOTItMjE4MTBmZDkyZDM3IiwiYXBwRGVmSWQiOiIxNGJjZGVkNy0wMDY2LTdjMzUtMTRkNy00NjZjYjNmMDkxMDMiLCJtZXRhU2l0ZUlkIjoiZTkxNGUxNTAtNmQxMy00ZTJmLWE5NDAtN2UwMThkMGQzMjkzIiwic2lnbkRhdGUiOiIyMDIwLTEyLTA5VDAxOjU3OjUyLjE2OVoiLCJ1aWQiOiI2MjVmZjQzZi01NWQ2LTRmMDQtYTQ1MC1iODBiNzg0ODMyOTgiLCJwZXJtaXNzaW9ucyI6Ik9XTkVSIiwiZGVtb01vZGUiOmZhbHNlLCJvcmlnaW5JbnN0YW5jZUlkIjoiMmM1YzY1MDEtYTJiYi00NjgzLWI2MGQtNGRjMjJmMWZjYmZiIiwiYmlUb2tlbiI6IjZmZjQyMzkyLTdjZjktMGY5Yi0wYmQyLTVmODA4MmQ0MWZhNCIsInNpdGVPd25lcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4Iiwic2l0ZU1lbWJlcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4IiwiZXhwaXJhdGlvbkRhdGUiOiIyMDIwLTEyLTA5VDA1OjU3OjUyLjE2OVoiLCJsb2dpbkFjY291bnRJZCI6IjYyNWZmNDNmLTU1ZDYtNGYwNC1hNDUwLWI4MGI3ODQ4MzI5OCJ9&amp;viewMode=onboarding&amp;locale=ja&amp;appDefId=14bcded7-0066-7c35-14d7-466cb3f09103&amp;commonConfig=%7B%22brand%22%3A%22wix%22%7D&amp;cbi=%7B%22app_id%22%3A%2214bcded7-0066-7c35-14d7-466cb3f09103%22%2C%22evid%22%3A12%2C%22initiator%22%3A%22ADI%22%2C%22instance_id%22%3A%22602e5d56-fe27-4c12-879c-126c60570dc0%22%2C%22msid%22%3A%22e914e150-6d13-4e2f-a940-7e018d0d3293%22%2C%22ownerId%22%3A%22625ff43f-55d6-4f04-a450-b80b78483298%22%2C%22src%22%3A75%2C%22type%22%3A%22GFPP_MANAGE%22%7D" target="_self">#lists</a>.isEmpty(name) //リストが空かチェックする</p><p><a href="https://www.wix.com/dashboard/e914e150-6d13-4e2f-a940-7e018d0d3293/blog/search/.hash.maps?compId=TPASection_ki9roq13&amp;origin=ADI-section&amp;instance=aLxuziP8jOMiUyu2zKsrn1ks-bDInUNg7l7kizMiq9I.eyJpbnN0YW5jZUlkIjoiODZlMGMyYzItMTFlYS00MWI0LWEyOTItMjE4MTBmZDkyZDM3IiwiYXBwRGVmSWQiOiIxNGJjZGVkNy0wMDY2LTdjMzUtMTRkNy00NjZjYjNmMDkxMDMiLCJtZXRhU2l0ZUlkIjoiZTkxNGUxNTAtNmQxMy00ZTJmLWE5NDAtN2UwMThkMGQzMjkzIiwic2lnbkRhdGUiOiIyMDIwLTEyLTA5VDAxOjU3OjUyLjE2OVoiLCJ1aWQiOiI2MjVmZjQzZi01NWQ2LTRmMDQtYTQ1MC1iODBiNzg0ODMyOTgiLCJwZXJtaXNzaW9ucyI6Ik9XTkVSIiwiZGVtb01vZGUiOmZhbHNlLCJvcmlnaW5JbnN0YW5jZUlkIjoiMmM1YzY1MDEtYTJiYi00NjgzLWI2MGQtNGRjMjJmMWZjYmZiIiwiYmlUb2tlbiI6IjZmZjQyMzkyLTdjZjktMGY5Yi0wYmQyLTVmODA4MmQ0MWZhNCIsInNpdGVPd25lcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4Iiwic2l0ZU1lbWJlcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4IiwiZXhwaXJhdGlvbkRhdGUiOiIyMDIwLTEyLTA5VDA1OjU3OjUyLjE2OVoiLCJsb2dpbkFjY291bnRJZCI6IjYyNWZmNDNmLTU1ZDYtNGYwNC1hNDUwLWI4MGI3ODQ4MzI5OCJ9&amp;viewMode=onboarding&amp;locale=ja&amp;appDefId=14bcded7-0066-7c35-14d7-466cb3f09103&amp;commonConfig=%7B%22brand%22%3A%22wix%22%7D&amp;cbi=%7B%22app_id%22%3A%2214bcded7-0066-7c35-14d7-466cb3f09103%22%2C%22evid%22%3A12%2C%22initiator%22%3A%22ADI%22%2C%22instance_id%22%3A%22602e5d56-fe27-4c12-879c-126c60570dc0%22%2C%22msid%22%3A%22e914e150-6d13-4e2f-a940-7e018d0d3293%22%2C%22ownerId%22%3A%22625ff43f-55d6-4f04-a450-b80b78483298%22%2C%22src%22%3A75%2C%22type%22%3A%22GFPP_MANAGE%22%7D" target="_self">#maps</a>.size(map) //mapのサイズを計算する</p><p><a href="https://www.wix.com/dashboard/e914e150-6d13-4e2f-a940-7e018d0d3293/blog/search/.hash.messages?compId=TPASection_ki9roq13&amp;origin=ADI-section&amp;instance=aLxuziP8jOMiUyu2zKsrn1ks-bDInUNg7l7kizMiq9I.eyJpbnN0YW5jZUlkIjoiODZlMGMyYzItMTFlYS00MWI0LWEyOTItMjE4MTBmZDkyZDM3IiwiYXBwRGVmSWQiOiIxNGJjZGVkNy0wMDY2LTdjMzUtMTRkNy00NjZjYjNmMDkxMDMiLCJtZXRhU2l0ZUlkIjoiZTkxNGUxNTAtNmQxMy00ZTJmLWE5NDAtN2UwMThkMGQzMjkzIiwic2lnbkRhdGUiOiIyMDIwLTEyLTA5VDAxOjU3OjUyLjE2OVoiLCJ1aWQiOiI2MjVmZjQzZi01NWQ2LTRmMDQtYTQ1MC1iODBiNzg0ODMyOTgiLCJwZXJtaXNzaW9ucyI6Ik9XTkVSIiwiZGVtb01vZGUiOmZhbHNlLCJvcmlnaW5JbnN0YW5jZUlkIjoiMmM1YzY1MDEtYTJiYi00NjgzLWI2MGQtNGRjMjJmMWZjYmZiIiwiYmlUb2tlbiI6IjZmZjQyMzkyLTdjZjktMGY5Yi0wYmQyLTVmODA4MmQ0MWZhNCIsInNpdGVPd25lcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4Iiwic2l0ZU1lbWJlcklkIjoiNjI1ZmY0M2YtNTVkNi00ZjA0LWE0NTAtYjgwYjc4NDgzMjk4IiwiZXhwaXJhdGlvbkRhdGUiOiIyMDIwLTEyLTA5VDA1OjU3OjUyLjE2OVoiLCJsb2dpbkFjY291bnRJZCI6IjYyNWZmNDNmLTU1ZDYtNGYwNC1hNDUwLWI4MGI3ODQ4MzI5OCJ9&amp;viewMode=onboarding&amp;locale=ja&amp;appDefId=14bcded7-0066-7c35-14d7-466cb3f09103&amp;commonConfig=%7B%22brand%22%3A%22wix%22%7D&amp;cbi=%7B%22app_id%22%3A%2214bcded7-0066-7c35-14d7-466cb3f09103%22%2C%22evid%22%3A12%2C%22initiator%22%3A%22ADI%22%2C%22instance_id%22%3A%22602e5d56-fe27-4c12-879c-126c60570dc0%22%2C%22msid%22%3A%22e914e150-6d13-4e2f-a940-7e018d0d3293%22%2C%22ownerId%22%3A%22625ff43f-55d6-4f04-a450-b80b78483298%22%2C%22src%22%3A75%2C%22type%22%3A%22GFPP_MANAGE%22%7D" target="_self">#messages</a>.messages.msg('msgKey') //msgKeyに対応するメッセージを取得する</p><p>&nbsp;</p><p>６。エラーメッセージの出力</p><p>th:error="フィールド”のフォーマットを使う</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/d8/32/p/o1350036614863798993.png"><img alt="" contenteditable="inherit" height="168" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/d8/32/p/o1350036614863798993.png" width="620"></a></p><p>&lt;span&gt;で囲まれたものはエラ〜メッセージを 表示させるということを明示しているだけで</p><p>&nbsp;</p><p>７。データをサーバーに送信する際に使用するタグ</p><p>&lt;form&gt; &lt;input&gt;を使用して入力値の受け渡しを行う</p><p>th:action = "@{送信先のURL}"を使ってフォームの送信先を指定</p><p>th:object="${先頭を小文字にしたFormクラス名}"で</p><p>入力フォームとFormクラスオブジェクトの紐付け</p><p>th:field="*{フィールド名}"でth:objectで紐付けた Formクラス内のフィールドを紐付ける</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/5a/13/p/o1352036414863799104.png"><img alt="" contenteditable="inherit" height="167" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/5a/13/p/o1352036414863799104.png" width="620"></a></p><p>&nbsp;</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642954485.html</link>
<pubDate>Wed, 09 Dec 2020 11:43:02 +0900</pubDate>
</item>
<item>
<title>SB Form　作る、格納、画面に追加</title>
<description>
<![CDATA[ <p>Formクラスは画面から入力値を格納する箱</p><p>として使われるクラス（JavaBeans）という説明は前した気がする。多分。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/cf/e5/p/o0818035214863797278.png"><img alt="" contenteditable="inherit" height="181" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/cf/e5/p/o0818035214863797278.png" width="420"></a></p><p>&nbsp;</p><p>Formの作り方と格納の仕方、画面にフォームを追加する方法を紹介する。</p><p>まず、<span style="text-decoration:underline;">Formクラスを</span>作るとしたらこんな感じになる。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a2/d4/p/o1350047014863795885.png"><img alt="" contenteditable="inherit" height="216" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a2/d4/p/o1350047014863795885.png" width="620"></a></p><p>private String priceはフィールドで</p><p>BeanValidationをつけるとしたらこうなる。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/2c/14/p/o1354042614863796003.png"><img alt="" contenteditable="inherit" height="195" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/2c/14/p/o1354042614863796003.png" width="620"></a></p><p>@NotBlank = 入力必須</p><p>@Size = 文字数制御</p><p>@Pattern = 入力する文字列の形式を制御</p><p>&nbsp;</p><p>では、<span style="text-decoration:underline;">FormクラスをModelに格納</span>するとしたらどうなるのだろうか？</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/35/f8/p/o1346026614863796250.png"><img alt="" contenteditable="inherit" height="123" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/35/f8/p/o1346026614863796250.png" width="620"></a></p><p>あれ。意外と簡単じゃん？</p><p>そう、こういうのは意外とできちゃうもの。</p><p>そうなったら確認した後のFormも受け取りたいと思ってしまうのが人間。</p><p>だからこれも下に追加してみる。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/da/57/p/o1354032014863796381.png"><img alt="" contenteditable="inherit" height="147" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/da/57/p/o1354032014863796381.png" width="620"></a></p><p>追加で入力チェックの結果を受け取りたかったら</p><p>BindingResultsていうの入れるのもあり。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/2d/d3/p/o1354046814863796540.png"><img alt="" contenteditable="inherit" height="214" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/2d/d3/p/o1354046814863796540.png" width="620"></a></p><p>では最後に</p><p>itemCreateForm.htmlに<span style="text-decoration:underline;">入力フォーム</span>を作成する。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/56/2a/p/o1350047214863796689.png"><img alt="" contenteditable="inherit" height="217" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/56/2a/p/o1350047214863796689.png" width="620"></a></p><p>th:ifで条件によって表示非表示ができる。フォーマットはこんな感じ</p><pre data-offset-key="1cogr-0-0"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/da/d6/p/o1350006414863796803.png"><img alt="" contenteditable="inherit" height="29" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/da/d6/p/o1350006414863796803.png" width="620"></a></pre><p>th:errorsではフィーリドのエラーメッセージを表示。フォーマットはこんな感じ</p><pre data-block="true" data-editor="editor" data-offset-key="2kvlv-0-0"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/90/12/p/o1360006414863796941.png"><img alt="" contenteditable="inherit" height="29" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/90/12/p/o1360006414863796941.png" width="620"></a></pre><p>長くなったけど意外と見てみたら簡単なもん。</p><p>わからなかったらこのページを見てコピペしちゃえば大丈夫！</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642953528.html</link>
<pubDate>Wed, 09 Dec 2020 11:37:10 +0900</pubDate>
</item>
<item>
<title>SB ServiceClassとRepositoryの呼び出し</title>
<description>
<![CDATA[ <p>では実際どんなコードを書くのか。簡単な例を見せようと思う。</p><p>&nbsp;</p><p>例えばページを目的のために移りたい。そう思った場合必要なのは３つある。</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/66/7d/p/o0360024014863795389.png"><img alt="" contenteditable="inherit" height="147" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/66/7d/p/o0360024014863795389.png" width="220"></a></p><p>１。コントローラクラスとメソッドの作成</p><p>２。URLの指定</p><p>３。HTMLにリンクを追加</p><p>&nbsp;</p><p><span style="font-weight:bold;">１。クラスとメソッドの作成</span></p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/6f/a6/p/o1352031214863794177.png"><img alt="" contenteditable="inherit" height="143" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/6f/a6/p/o1352031214863794177.png" width="620"></a></p><p>&nbsp;</p><p><span style="font-weight:bold;">２。URLの指定</span></p><p style="text-align: left;"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/30/ef/p/o1354041814863794300.png"><img alt="" contenteditable="inherit" height="191" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/30/ef/p/o1354041814863794300.png" width="620"></a></p><p>&nbsp;</p><p><span style="font-weight:bold;">３。HTMLの作成</span></p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/fb/db/p/o1354016014863794390.png"><img alt="" contenteditable="inherit" height="73" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/fb/db/p/o1354016014863794390.png" width="620"></a></p><p>&nbsp;</p><p>こう考えてみると意外と簡単なのではないだろうか。</p><p>&nbsp;</p><p>ServiceClassをControllerClassからとりだす</p><p>では、ReadServiceという</p><p>日付を出してくれるサービスクラスを追加で作ったとする。</p><p>一覧画面コントローラーからサービスクラスはどう取り出されるのか？</p><p>それは思っている以上に簡単である。</p><p>&nbsp;</p><p>そう、することはSpring Boot DIの基礎で述べたことである。</p><p>１。一覧画面コントローラーでフィールド定義</p><p>２。コンストラクタでサービスのインスタンスを受け取りフィールドに設定</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/31/a2/p/o1352032014863794487.png"><img alt="" contenteditable="inherit" height="147" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/31/a2/p/o1352032014863794487.png" width="620"></a></p><p>&nbsp;</p><p>たったこれだけ。</p><p>だんだん点と点がつながってきている気がするのではないだろうか。</p><p>&nbsp;</p><p><span style="font-weight:bold;"><span style="text-decoration:underline;">サービスクラスからRepositoryのメソッドを呼び出す</span></span></p><p>では、Repositoryはどうやって呼び出すものか、、、</p><p>必要なことは</p><p>１。ServiceクラスにfindAllItemsメソッドを作成</p><p>２。DBとやりとりをするメソッドに＠Transactionalアノテーションを設定</p><pre data-offset-key="7qseo-0-0"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a7/36/p/o1354026614863794575.png"><img alt="" contenteditable="inherit" height="122" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/a7/36/p/o1354026614863794575.png" width="620"></a></pre><pre data-offset-key="7qseo-0-0"><span style="text-decoration:underline;">Repositoryメソッドを呼び出すサービスクラスをコントローラクラスから呼び出す</span>呼び出したものをさらに呼び出すには?</pre><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/98/40/p/o1354006014863794986.png"><img alt="" contenteditable="inherit" height="27" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/98/40/p/o1354006014863794986.png" width="620"></a></p><p>そう、意外と楽なものだったりする。</p><p>フォーマットさえ覚えてしまえば大丈夫。</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642952659.html</link>
<pubDate>Wed, 09 Dec 2020 11:31:39 +0900</pubDate>
</item>
<item>
<title>SB CRUDとは</title>
<description>
<![CDATA[ <p>SBの基礎はわかったから早くアプリを作りたいと思うだろう、、</p><p>でももう少し説明させて欲しい。</p><p>&nbsp;</p><p>Webアプリケーションは2つタイプがある：</p><p>1つ目が静的ページ。</p><p>2つ目が動的ページ。</p><p>&nbsp;</p><p>静的ページは誰がいつアクセスしても表示内容が同じ。</p><p>みんなが知っているものの中では利用契約とかである。</p><p>&nbsp;</p><p>一方、動的ページアクセスする人やタイミングで表示内容が変わる。</p><p>オンラインショッピングする時に最新の情報が出てきたりとか</p><p>それは動的ページっていう分類に入る。</p><p>基本的に静的ページから作り始めて動的ページを作ることが多い。</p><p>&nbsp;</p><p>で、SpringBootを用いたWebアプリケーション開発で</p><p>一般的な処理区分であるものはCRUDて呼ばれている。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/22/55/j/o0700040014863791687.jpg"><img alt="" contenteditable="inherit" height="126" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/22/55/j/o0700040014863791687.jpg" width="220"></a></p><p>C=Create</p><p>R=Read</p><p>U=Update</p><p>D=Delete</p><p>&nbsp;</p><p>ここまで理解できたあなたはもうSBをマスターしているので</p><p>アプリ開発に進もう！</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642951081.html</link>
<pubDate>Wed, 09 Dec 2020 11:21:09 +0900</pubDate>
</item>
<item>
<title>Spring Boot DIの基礎</title>
<description>
<![CDATA[ <p><span style="font-weight:bold;">Dependency Injection（DI）て？</span></p><p>&nbsp;</p><p>DIはオブジェクトの注入ということで</p><p>実態化（インスタンスの生成）と使用を分ける。</p><p>........ て言われてもわからない。</p><p>&nbsp;</p><p>DI=インスタンス生成を任せるって覚えていれば大丈夫だ。</p><p>&nbsp;</p><p><span style="font-weight:bold;">なんでこれが必要かって？</span></p><p>例えば、ディズニーの予約とか</p><p>同時に何人かにアクセスされる際に</p><p>インスタンスをnew~ 方法で作ると何万個って必要。</p><p>何万個も作ってしまうとサーバーがパンクする。</p><p>それは困るからDIを使う。</p><p>&nbsp;</p><p>SampleServiceのメソッドがSampleControllerで呼び出される時</p><p>今までやってきたのが左で、さらに便利なのが右。</p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/d8/7c/p/o1044054814863790308.png"><img alt="" contenteditable="inherit" height="325" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/d8/7c/p/o1044054814863790308.png" width="620"></a></p><p>&nbsp;</p><p>こうすることでnew~ と言った方法でインスタンスを生成しなくて済むようになる。</p><p>&nbsp;</p><p>じゃあ左の方はどうやってインスタンスを取得して使用してるの？</p><p>緑になっているところがキーポイント。</p><p>&nbsp;</p><p>キーポイントは主に４つ：</p><p>１。DI対象クラスを登録</p><p>２。インスタンスを格納するフィールドを定義</p><p>３。インスタンスを注入</p><p>４。クラスを使用</p><p>&nbsp;</p><p>DI対象クラスの登録はアノテーション付与でできる。</p><p>@Controller, @Service, @Repository, @Componentを覚えておけば大丈夫。</p><p>インスタンスを格納するフィールドはprivate final X Y...のフォーマットで、</p><p>インスタンスを注入するには@Autowiredアノテーションでできる。</p><p>&nbsp;</p><p>ここで大事なのがフィールドのセット。</p><p>セットしないとクラス内で使えないのでthis.Y=Xのスタイルで書くこと。</p><p>セットしたらクラスを使用できるようになる。</p><p>上の例だと</p><p>String sampleString = this.service.getSampleString();のところ。</p><p>&nbsp;</p><p>キーポイントさえわかっていればこれから楽できる。</p><p>わからなかったらこのページをまた見て確認してね！</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642950648.html</link>
<pubDate>Wed, 09 Dec 2020 11:18:10 +0900</pubDate>
</item>
<item>
<title>Spring Boot 基礎</title>
<description>
<![CDATA[ <p><span style="font-weight:bold;"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/27/c6/p/o0293017214863788796.png"><img alt="" contenteditable="inherit" height="" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/27/c6/p/o0293017214863788796.png" width="0"></a></span></p><p><span style="font-weight:bold;">Spring Boot（SB）て一体何？</span></p><p><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/f9/8f/p/o0237021314863789352.png"><img alt="" contenteditable="inherit" height="135" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/f9/8f/p/o0237021314863789352.png" width="150"></a></p><p>SBはJava向けのフレームワーク。</p><p>画面とデータベースを繋ぐプログラム開発のサポートができる。</p><p>だから、あなたが入力した値をプログラムに引き渡したり</p><p>画面の表示内容を変えたりとかできちゃう簡単で便利なもの。</p><p>&nbsp;</p><p>メリットは</p><p>１。Webアプリケーションの起動が簡単</p><p>２。新規開発を助けるツール</p><p>３。利用実績の情報が豊富だからわからないことはネットでググればいい</p><p>&nbsp;</p><p><span style="font-weight:bold;">簡単に使えるっていうけどどうやって？</span></p><p>SpringMVCて言うWebアプリケーション開発において</p><p>利用されるフレームワークがある。</p><p>&nbsp;</p><p>Controller：</p><p>１。URLのアクセスがあったらどの画面を表示するかを書くクラス</p><p>２。画面から受け取った入力値・画面に表示する出力値を管理する</p><p>&nbsp;</p><p>Form：</p><p>１。画面からの入力値を格納する箱（入れ物）</p><p>２。JavaBeansとして作成</p><p>&nbsp;</p><p>Service：</p><p>１。作成する機能のメイン部分となる処理を書くクラス</p><p>２。Controllerから呼び出される</p><p>&nbsp;</p><p>Repository（JPAを利用する時にはインターフェイスとして作成） ：</p><p>１。データベースに対する操作（参照や更新）をする</p><p>２。Serviceから呼び出される</p><p>３。Entityという箱を使ってデータベース上の値を操作する</p><p>&nbsp;</p><p>Entity：</p><p>１。データベース上の値を格納する箱（入れ物）</p><p>２。JavaBeansとして作成</p><p>&nbsp;</p><p>この五つの関係性と機能がわかれば基礎の８０％ぐらい理解してる。</p><p>&nbsp;</p><p>でもさModel（画面への出力値）てどうやって表示されるの？て思うだろう。</p><p>HTMLで一回一回入力するのはちょっと難しい、、</p><p>てことで、そこで使われるのがThymeleaf。</p><p style="text-align: left;"><a href="https://stat.ameba.jp/user_images/20201209/11/arikah2019/27/c6/p/o0293017214863788796.png"><img alt="" contenteditable="inherit" height="172" src="https://stat.ameba.jp/user_images/20201209/11/arikah2019/27/c6/p/o0293017214863788796.png" width="293"></a></p><p>ThymeleafはJava向けのテンプレートエンジン。</p><p>HTMLでテンプレ作って</p><p>Model（画面への出力値）を入れて</p><p>画面に表示してくれる便利なマシーン。</p><p>&nbsp;</p><p>ここまでわかったら基礎はバッチリ！</p><p>&nbsp;</p>
]]>
</description>
<link>https://ameblo.jp/arikah2019/entry-12642949551.html</link>
<pubDate>Wed, 09 Dec 2020 11:10:51 +0900</pubDate>
</item>
</channel>
</rss>
