struts2のvalidation.xmlとgetTextについて

2020-10-28


こんにちは管理人(@vip___p)です。

今回はstruts2のvalidation.xmlについて触れていこうと思います。

要所を抑えておかないと意外と手間取るので注意してください。

下記のような方は是非参考にしてください。

  • validationを使用予定
  • struts2について学習中または予定
  • validationに詰まっている

Struts2のvalidation.xmlの注意点

validationの注意点についてまとめています。

急がず順に確認していきましょう。

クラス名は同じにしてパッケージは同じ階層にする

少し雑なタイトルですが確認していきます。

まずはxmlAction名を同じにしましょう。

  1. SampleAction.java
  2. Sample-validation.xml

このように同じ名前にしてください。
また同じパッケージに属するようにしましょう。
意外とStruts2の記事が少なく詰まりました。

続いては意外と簡単なミスを紹介します。

Struts.xmlにinputの記述!

Struts.xmlにinputの記述を忘れている方が多いです。
これはvalidationがとった場合(error)inputを返すからです。

<!--?xml version="1.0" encoding="UTF-8"?-->
<!-- アクションのパッケージ定義 -->
<package name="default" extends="struts-default">
<!-- Hello worldのサンプルアクション -->
<action name="hello" class="sample.HelloWorldAction" method="execute">
<result name="success">/view/sample/HelloWorld.jsp</result>
<!-- 忘れがち -->
<result name="input">/view/sample/HelloWorld.jsp</result>
</action>
</package>

inputの処理が記述できればもう少しです。

jspにも記述を忘れない

jspの記述も忘れないでください。
これがないとerror文がでない

ActionSupportを継承するすると後程紹介するgetTextが使用でき便利です。

Sample-validation.xml

ActionSupportを継承するすると後程紹介するgetTextが使用でき便利です。
Action

public class RegisterAction extends ActionSupport {
 private String name;
 
 public String getName() {
        return this.name;
    }
    
 public void setName(String name) {
        this.name = name;
    }
}

Dtdはダウンロードしたファイルにあります。

<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<field name="name">
<!-- 必須 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>ユーザ名は必須入力</message>
</field-validator>
</field>

遷移前

<body>
<s:form action="hello">
<s:textfild name="name" value="name" />
<s:submit value="遷移前" />
</form>
</body>
 

 

遷移後

<body>
<s:form action="hello">
<s:textfild name="name" value="name" />
<s:submit value="遷移前" />
</form>
</body>

プロパティファイルを参照する場合

意外と使用するプロパティファイルを参照するには注意が必要です。
まずはstruts.xmlに記述を追加します。
プロパティファイルの名前を記述します。
複数ある場合はカンマ区切りで使用しましょう。
下記の二つを参照する場合はこのような記述になります。

  1. sample.properties
  2. test.prooerties
sample.properties
sample.name = name
sample.adress = abcde@
sample.mail = {0}gmail.com

validation.xml

<field name="name">
<!-- 必須 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("sample.name")}</message>
</field-validator>
</field>

プロパティファイルに値を代入する場合の処理も続けて紹介します。

プロパティファイルに値を代入する方法

<field name="name">
<!-- 必須 -->
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>${getText("sample.mail",{getText("sample.adress")})}</message>
</field-validator>
</field>

propertiesに2つ以上値を代入する場合は下記のとおりです。

<message>${getText("sample.mail",{getText("sample.adress"),getText("sample.adress"})}</message>

まとめ

まとめ

今回のまとめです。

皆さんの参考になれば幸いです。