JSTLを使ってみました。

web.xmlに、taglib宣言が必要、と書いてあるサイトもけっこうあったんですが

結果的に、ずんWiki  に書いてあるような、


 ・jstl.jarstandard.jar を WEB-INF/lib にコピー(クラスパスも通した)

 ・jsp ページにtaglib ディレクティブを書く

   <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


というだけで動きました。


文法とか、XSLTによく似てるなあ。

…メンドクサイ


【参考ページ】

>>JSTL(標準タグライブラリ)

>>ずんWiki

  セットアップは、ここを参考にするのがおすすめ。とてもシンプル

>>web.xmlでtaglib宣言って不要ですか?


いいことを思いついた。


validation.xmlによるバリデート処理と
別クラスでつくったビジネスロジック的なバリデート処理を
validatorForm()を拡張したFormクラスのvalidate()メソッド内でまとめて書く。
でもそうすると結局Beanにビジネスロジックが入っちゃうので
ビジネスロジック的なバリデート処理に使うクラスを
struts-config.xmlのなかでactionタグごとに定義できて、それを参照できたらいいなあ

…というもの。


【参考ページ】

>>Validatorとvalidate()メソッドの共存


>>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がうまく機能してなかったりしました

エクリプスで、プラグインを入れたのに、Webプロジェクトが作成できなかったのが、解決しました。

一回、エクリプスをコマンドプロンプトから-cleanオプションつきで起動したら、なおりました。

あーこれで快適。