JSTLを使ってみました。
web.xmlに、taglib宣言が必要、と書いてあるサイトもけっこうあったんですが
結果的に、ずんWiki に書いてあるような、
・jstl.jar と standard.jar を WEB-INF/lib にコピー(クラスパスも通した)
・jsp ページにtaglib ディレクティブを書く
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
というだけで動きました。
文法とか、XSLTによく似てるなあ。
…メンドクサイ
【参考ページ】
>>ずんWiki
セットアップは、ここを参考にするのがおすすめ。とてもシンプル
いいことを思いついた。
validation.xmlによるバリデート処理と
別クラスでつくったビジネスロジック的なバリデート処理を
validatorForm()を拡張したFormクラスのvalidate()メソッド内でまとめて書く。
でもそうすると結局Beanにビジネスロジックが入っちゃうので
ビジネスロジック的なバリデート処理に使うクラスを
struts-config.xmlのなかでactionタグごとに定義できて、それを参照できたらいいなあ
…というもの。
【参考ページ】
>>Strutsのアクションマッピングに独自パラメータを追加
>>getMethod()とinvoke()でメソッドを実行
以上を組み合わせて、どうにか、できました!!
詳しくはまた今度。
突然高度なメソッドを乱用して、疲れた。。
簡単なログインサンプルをつくり、入力値のチェックをValidatorFormを使ってやってみました。
【参考】http://www.stackasterisk.jp/tech/java/strutsSec02_02.jsp#3
以下は、自分の覚え書きです。
■ディレクトリ構成は、こんな感じ。
(色がついているのは、下記のstruts-config.xmlの記述と対応させてます)
+strutsTest
+JavaSource
+logintest
+action
LoginAction.java
+form
LoginForm.java
+resource
msg.properties
+WEB-INF
+jsp
login.jsp
menu.jsp
+lib
web.xml
struts-config.xml
validation.xml
validator-rules.xml
他、tldファイルなど・・
■struts-confing.xmlの設定
<struts-config>
<form-beans>
<form-bean name="MyLoginForm" type="logintest.form.LoginForm" />
</form-beans>
<action-mappings>
<action path="/viewLogin" forward="/WEB-INF/jsp/login.jsp" />
<action path="/login" type="logintest.action.LoginAction"
input="/WEB-INF/jsp/login.jsp"
name="MyLoginForm" scope="request" validate="true" >
<forward name="initial" path="/WEB-INF/jsp/login.jsp" redirect="false" />
<forward name="success" path="/WEB-INF/jsp/menu.jsp" redirect="false" />
<forward name="error" path="/WEB-INF/jsp/login.jsp" redirect="false" />
</action>
</action-mappings>
<message-resources parameter="logintest.resource.msg"/>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property
property="pathnames"
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
validate="true"は、validatorFormで入力値チェックするよ、てことです
■validation.xmlの記述
とりあえず、"id"というフィールドの空入力チェック
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_0.dtd
">
<form-validation>
<global>
</global>
<formset>
<form name="MyLoginForm*1">
<field property="id*2" depends="required*3">
<arg0 key="ID*4" resource="false"/>
</field>
</formset>
</form-validation>
*1 struts-config.xmlで定義してる、FormBean名。
*2 jspに書いてる、formのフィールド名。<input type="text" name="id" />
*3 なんのチェックするか。validator-rules.xmlと対応。"required"は、入力必須チェック
*4 エラーメッセージに渡す引数。下記の、msg.properties内のerrors.required={0} is required.の
{0}の部分に入れる文字列
■msg.propertiesの記述
errors.required={0} is required.
このへんは、validator-rules.xmlのなかにコメントアウトで標準のエラーメッセージ例が書いてあるので、それを参考に
■login.jspでの表記
<%@ page contentType="text/html; charset=Shift_jis" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<html:html>
<head>
<title>ログイン画面</title>
<style TYPE="text/css">
<!--
.err { color: red; }
-->
</style>
</head>
<body>
<html:form action="/login">
<html:hidden property="mode" value="input" />
<table border="0">
<tr>
<td colspan="2" class="err">
<html:errors />
</td>
</tr>
<tr>
<td>名前</td><td><html:text property="id" /></td>
</tr>
<tr>
<td>パスワード</td><td><html:password property="passwd" /></td>
</tr>
<tr>
<td colspan="2"><html:submit value="ログイン" /></td>
</tr>
</table>
</html:form>
</body>
</html:html>
※validatorでエラーがあった場合、<html:errors />の部分にエラーメッセージが表示されます。
この例だと、idを入力せずに送信するとID is required.
■LoginForm.javaでは
ActionFormではなく、ValidatorFormをextendsする
public class LoginForm extends ValidatorForm{
~中身は、変数の宣言と、getterとsetterのみ~
}
はまった点としては・・・
lib内のcommon-validator.jarとかvalidator-rules.xmlのバージョンには要注意。。 tomcat起動時にエラー出るようになったり、validateがうまく機能してなかったりしました
一回、エクリプスをコマンドプロンプトから-cleanオプションつきで起動したら、なおりました。
あーこれで快適。