サイト「Struts 2入門(2)~バリデーションの仕組みを理解する(前編)~」を元に差分の技術的要素を記載します。
■前提条件
Struts 2.3.16.3
■プロジェクト
プロジェクトのファイル構成は以下の通り。
■ライブラリ
以下の9ファイルを/WEB-INF/libフォルダへコピーする。(前回と変わりません)
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang3-3.1.jar
commons-logging-1.1.3.jar
freemarker-2.3.19.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
xwork-core-2.3.16.3.jar
javassist.jar (入手先)
■Research-ResearchConfirm-validation.xml
バリデータのDTDファイルを以下の通りに変更しました。
<?xml version="1.0" encoding="UTF-8"?>
<!--
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
-->
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
<!-- 1. 名前フィールドの必須入力チェック -->
<field name="name">
<field-validator type="requiredstring">
<message>名前を入力してください</message>
</field-validator>
</field>
(以下、省略)
DTDファイルが1.0.2の場合、以下のエラーメッセージが表示されて、バリデーションがうまく動作しない。
8 29, 2014 11:35:59 午後 com.opensymphony.xwork2.validator.AnnotationActionValidatorManager error
重大: Caught exception while loading file part2/Research-ResearchConfirm-validation.xml
http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd - Class: sun.net.www.protocol.http.HttpURLConnection
File: HttpURLConnection.java
Method: getInputStream
Line: 1624 - sun/net/www/protocol/http/HttpURLConnection.java:1624:-1
at com.opensymphony.xwork2.util.DomHelper.parse(DomHelper.java:119)
at com.opensymphony.xwork2.validator.DefaultValidatorFileParser.parseActionValidatorConfigs(DefaultValidatorFileParser.java:82)
(省略)
Caused by: java.io.FileNotFoundException: http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1624)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:640)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEntityManager.java:1290)
(省略)
参考サイト:Struts 2 Validation Using XML File Tutorial | DZon
■research.jsp
DMI(Dynamic Method Invocation)はセキュリティ上よろしくないため、
Struts2.3.15.2からデフォルトで使用できないようになりました。
そのため、フォームのアクションを以下のように変更しました。
<!-- <s:form action="Research"> -->
<s:form action="ResearchConfirm">
<s:textfield name="name" label="名前" />
<s:textfield name="email" label="メールアドレス" />
<s:textfield name="age" label="年齢" />
<s:radio name="career" label="どの携帯のCMが好き?"
list="#{'1':'ドコモ', '2':'au', '3':'ソフトバンク'}"/>
<!-- <s:submit value="確認" action="ResearchConfirm" /> -->
<s:submit value="確認" />
</s:form>
参考サイト
Struts 2 Security Vulnerability - Dynamic Method Invocation
Apache Struts 2 Documentation Version Notes 2.3.15.2
■実行結果
・トップ画面
・入力画面
・確認画面
・バリデーション結果画面
以上