メモ¶
1. Nablarchログ¶
ログ出力にはレベルがあり、レベルによって表示するエラーの量が変わります。
BeanExceptionはログレベル「DEBUG」として出力されているようなので、設定ファイル(log.properties)を書き換えてログレベルを変えれば出なくなると思います。
2. universalDaoの利用¶
検索条件が単項目・複数項目の場合、new Object[] {項目1, 項目2}
UserDto dto = UniversalDao.findBySqlFile(UserDto.class, "SEARCH_USER_DETAIL", new Object[] {form.getUserId()});
検索条件がbeanの場合(form dto entityなど)、new Objectが不要
List<UserDto> searchResult = UniversalDao.page(searchCondition.getPageNumber()).per(20L).findAllBySqlFile(UserDto.class, "SEARCH_USER", searchCondition);
3. List、Set、string配列の変更¶
リストをStringに変更
String [] samples = sampleList.toArray(new String[sampleList.size()]);
セットをStringに変更
String [] samples = sampleSet.toArray(new String[sampleSet.size()]);
セットからリストに変更
List<String> sampleList = new ArrayList<String>sampleSet;
リストからセットに変更
Set<String> sampleSet = new HashSet<String>sampleList;
4. <pre>タグの役割¶
- 連続する半角スペースはまとめて1つの半角スペースとして扱われる
- タブ文字は半角スペース1つとして扱われる
- 改行コードは半角スペース1つとして扱われる
- テキストが表示領域の横幅に達すると、そこで折り返して表示される
HTMLで</pre>タグを使用すると、直後に1行空行が入るのですが、これを入らなくするために、スタイルシートでmarginを0に設定する
<pre style="margin:0; padding:0"> aaa bbb </pre>
5. spring のリストに対して精査方法¶
入力フォームにリストを精査する時、こんな感じて作って、
@Digits(integer = 9, fraction = 0) private List<Integer> userIdList;
で、実際に動かしてみると、エラーになっる
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint 'javax.validation.constraints.Digits' validating type 'java.util.List'. Check configuration for 'userIdList'
対応方法として、以下の二つがある
- メインフォームに対応するサブフォームを作って@Validと組み合わせる方法。
@Valid private List<UserIdList> userIdList; public class UserIdList { @Digits(integer = 9, fraction = 0) private int userId; }
jsp側の書き方(nabalrchのタグを利用する場合):
<n:checkboxes name="form.userIdList" listName="userIds" elementLabelProperty="userName" elementValueProperty="userId" listFormat="span" elementLabelPattern="$LABEL$" /> <c:forEach begin="0" end="${userIds.size()-1}" varStatus="status"> <n:error name="form.userIdList[${status.index}].userId" errorCss="message-error" /> </c:forEach>
- Validを利用してリスト中に一つずつ精査する
@Valid private List<@Digits(integer = 9, fraction = 0) Integer> userIdList;
jsp側の書き方:
<form:checkboxes path="userIdList" items="${userIds}" itemLabel="userName" itemValue="userId"/> <form:errors path="userIdList" cssClass="message-error" element="div"/>
6. Springプロジェクトのソースコード修正後、コンパイルだけで反映するための依存関係¶
springプロジェクトに対して、サーバ起動のままソースコードの修正したら、サーバ再起動しないと変更点が反映できない。
サーバの再起動をせず、コンパイルだけで変更点を反映できるために、pomに以下の依存関係を追加する。
・Spring bootのバージョンが1.3以下の場合、springloadedを追加
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.8.RELEASE</version> </dependency> </dependencies> </plugin>
・Spring bootのバージョンが1.3以上の場合、spring-boot-devtoolsを追加
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency>
※それでは、デバックができなく。もう一つのプラグインを紹介する:Jrebel(変更したファイルだけをliveReloadする)
参考: https://www.zybuluo.com/weiys/note/1141626
7. 正規表現¶
分かりやすく参考のURL
https://java-reference.com/java_string_regex.html
8. doma-spring-bootのSQL例外変換¶
doma-spring-bootを利用すると、Doma2の例外クラス(JdbcException)をSpring Transactionの例外クラス(DataAccessException)に変換してくれます。
例えば、doma2の排他制御が行う時、基本的にOptimisticLockExceptionがスローされますが、 doma-spring-bootを利用される場合、実際にOptimisticLockingFailureExceptionがスローされる
詳細は以下のURLを参考
https://int128.hatenablog.com/entry/2017/01/07/020030
9. String.isEmpty()とStringUtils.isEmplty()の区別¶
StringのisEmpty()は対象変数のlength()が0(つまり空文字の場合)trueを返す。
StringUtilsのisEmpty()は対象変数がnullまだは空文字の場合trueを返す
String str1 = null;
String str2 = " ";
str1.isEmpty() ⇒ NullPointerExceptinが発生
str2.isEmpty() ⇒ true
StringUtils.isEmpty(str1) ⇒ true
StringUtils.isEmpty(str1) ⇒ true
10. Bean Validationのメモ¶
Bean Validation (JSR-303)は、JavaBeans のプロパティが取り得る値や条件を、精査する仕組み。Java EE6 から追加され、Java EE7 でのバージョンは1.1である。
Bean Validationの標準アノテーションのパッケージはjavax.validation.*
Hibernate ValidatorはBean Validationで定義されたアノテーションに加え、独自の検証用アノテーションを提供している。
Hibernate Validatorの代表的なアノテーションのパッケージはorg.hibernate.validator.constraints.*
Spring は、Java標準であるBean Validationをサポートしている。 単項目チェックには、このBean Validationを利用する。 相関項目チェックの場合は、Bean ValidationまたはSpringが提供しているorg.springframework.validation.Validatorインタフェースを利用する
Nablarchでは、2種類のバリデーション機能を提供されている。
* Java EE7のBean Validation(JSR349)に準拠したバリデーション機能
* Nablarch独自のバリデーション機能 (Nablarch Validation)
参考URL:
Nablarchの入力チェック
Springの入力チェック
ちなみに
@Validatedは、Bean Validation標準ではなく、Springの独自アノテーションである。 Bean Validation標準のjavax.validation.Validアノテーションも使用できるが、 @Validatedは@Validに比べて、 バリデーションのグループ(順序関係)を指定できる点で優れているため、@Validatedを使用することを推奨する。
11. セロ埋め、半角スペース埋める方法¶
記述例¶ 用途 記述例 備考 文字列の先頭を空白埋めする String.format(“%6s”, “abc”) 指定文字列を最大6桁まで文字列の左側に空文字を追加します。 文字列の後ろへ空白埋めする String.format(“%-6s”, “abc”) 指定文字列を最大6桁まで文字列の右側に空文字を追加します。 数字の先頭を0埋めする String.format(“%06d”, 123) 指定数字を最大6桁まで文字列の左側にゼロパディングします。 数字を3桁ごとにカンマ区切りする String.format(“%,d”, 123456789) 指定数字を3桁毎にカンマ区切りします。