Develop with pleasure!

福岡でCloudとかBlockchainとか。

バリデーションエラーメッセージのレイアウト変更。

画面入力値のバリデーションの結果エラーになった場合、入力画面にその旨をエラーメッセージとして表示する。
Struts2+FreeMarkerでは、<@s.fielderror/>タグでエラーメッセージを画面に表示できるが、デフォルトのエラーメッセージは

<ul><li>hogeが入力されていません。</li></ul>

というレスポンスが作成され、

●hogeが入力されていません。

といった表示になる。<ul><li>を排除して赤字のメッセージにしたい場合、Struts Classicの場合は、

errors.prefix=<div style="color:red;">
errors.suffix=</div>

といったプロパティ値をリソースファイルに定義しておけば良かった。が、Struts2の場合から、Strutsタグ(@sなど)で定義されたタグは、struts2-core-xxx.jarの中に入っているtemplate/simpleフォルダ内のレイアウトファイルが適用される。<@s.fielderror/>タグの場合に適用されるレイアウトは、fielderror.ftlファイルだ。

<#list eValue as eEachValue><#t/>
  <li><span<#rt/>
...
  </span></li>
</#list><#t/>

辺りの記載が適用されている。そのためレイアウトを変更するには、WEB-INFと同列にtemplate/simpleフォルダを作成し、このfielderror.ftlを配置し、<li><spanとかやってる部分を<div style="color:red;">といった形で書き換えてあげる必要がある。

こういったレイアウトファイルは、Struts2のタグで生成するHTMLの部品単位に存在している。確かに生成部品のレイアウトをこまめに変更できるというのはうれしいけど、エラーメッセージのレイアウト変えるくらいは、Struts Classicのようにprefix、suffixくらいでさっくり変えられるくらいがうれしい。