- PR -

Strutsのバリデート機能で相関チェック

投稿者投稿内容
Dai
会議室デビュー日: 2007/05/24
投稿数: 12
投稿日時: 2009-01-26 12:21
お世話になります。

Strutsでは、errorStyleなどでバリデートエラーになった入力項目にcssスタイルを適用させる事ができますが、
相関チェックの場合など、1つのエラーメッセージで、複数の入力項目にスタイルを適用する事はできないのでしょうか?

以下の例で言うと、aが空の時、"aとbを入力してください。"のメッセージとともに、
a, b両方に"background-color: pink"のスタイルを適用したいのです。

コード:
jsp

<html:text property="a" errorStyle="background-color: pink" />
<html:text property="b" errorStyle="background-color: pink" />


コード:
フォームのvalidateメソッド */

// aが空のとき
if (a == null || a.equals("")) {
    // aにスタイルを適用
    errors.add("a", new ActionMessage("aとbを入力してください。")); 
    
    // ここで、bにもスタイルを適用したいが、新たにメッセージを追加したくない
    // 実現方法はあるのか?

    // 以下の方法は全てダメ
    //errors.add("b", null); 
    //errors.add("b", new ActionMessage(null)); 
    //errors.add("a,b", new ActionMessage("aとbを入力してください。")); 
}



知っている方、ご教示お願いしますm(__)m
ジン
ベテラン
会議室デビュー日: 2007/07/27
投稿数: 52
投稿日時: 2009-01-26 13:10
errorStyleってありましたっけ??

validateメソッドでエラーに画面にフォワードする際
フラグを渡して
後は、JSP側でそのフラグを参照しstyleを変更すれば実現できます。
エラーの時に採用されるスタイルみたいなのは無かったと思います。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-01-26 13:18
方法は沢山あると思います。

その1
エラーがaにあろうがbにあろうが両方だろうが
<html:text property="a" errorStyle="background-color: pink" />
しか使わないようにする

その2
エラー内容によってJSP内で分岐させる

その3
専用のgetメソッドを用意する
Dai
会議室デビュー日: 2007/05/24
投稿数: 12
投稿日時: 2009-01-26 14:47
ジンさん、あすかさん

こんにちは。

JSPにフラグを渡せば実現可能ですよね。
ただ、JSP(View)での分岐を少なくしたい為、Strutsの機能でシンプルに実装したいと思っています。

バリデートエラー時にスタイルを変えたいケースは多くあるので、その為のerrorStyleです。

ただ、単体チェックには対応していても、相関チェックには対応していないのですかね?
やまだ
会議室デビュー日: 2009/01/14
投稿数: 8
投稿日時: 2009-01-26 17:57
Daiさんの書かれているようなコードで出来ましたよ。

コード:
JSP:
<html:form action="/Test.do" method="post">
  <html:errors property="a"/>
  <html:text property="a" errorStyle="background-color: pink" />
  <html:text property="b" errorStyle="background-color: pink" />
  <html:submit value="テスト"></html:submit>
</html:form>


コード:
/* フォームのvalidateメソッド */
ActionErrors errors = new ActionErrors();
if (a == null || a.equals("")) {
    errors.add("a", new ActionMessage("aとbを入力してください。", false));
    errors.add("b", new ActionMessage(null));
}
        
return errors;



これで両方のテキストボックスがピンクになりました。

当方で確認した環境は
struts1.2.9
tomcat5.5.26
です。
Dai
会議室デビュー日: 2007/05/24
投稿数: 12
投稿日時: 2009-01-26 19:45
レスありがとうございます。

こちらでもそのやり方でできました!
ただ、入力項目が多い為、個別のエラーメッセージ出力指定は考えておらず、
<html:errors/>とのみ記述しての一括出力指定で済ませたいです。

コード:

JSP:
<html:form action="/Test.do" method="post">
<html:errors />
<html:text property="a" errorStyle="background-color: pink" />
<html:text property="b" errorStyle="background-color: pink" />
<html:submit value="テスト"></html:submit>
</html:form>



コード:

/* フォームのvalidateメソッド */
errors.add("a", new ActionMessage("aとbを入力してください。", false));
errors.add("b", new ActionMessage(null));


だと、裏でStrutsは空のメッセージを持っている為、

コード:

MessageResources.properties:
errors.prefix=<li>
errors.suffix=</li>


の時、

<li>aとbを入力してください。</li>
<li></li>

と無駄な<li>が出てしまいます。

こちらではActionErrorsの拡張も視野に入れ始めました(T-T)
それでできるかはまだ不明ですが。。。

またはhtml:errorsタグを拡張して、空メッセージは出力しない様にするか、
<html:errors/> と書く代わりにエラー出力用jspをincludeして、そっちで
<html:messages id="error">でイテレートして、空メッセージ判定をしながら
出力する方法もありますね。

[ メッセージ編集済み 編集者: Dai 編集日時 2009-01-26 20:00 ]
朝日奈 ありす
ベテラン
会議室デビュー日: 2007/10/28
投稿数: 57
お住まい・勤務地: 北の都
投稿日時: 2009-01-26 22:09
header,footerをfarceにしてやれば?
Dai
会議室デビュー日: 2007/05/24
投稿数: 12
投稿日時: 2009-01-27 13:01
汀さん、こんにちは。

prefix, suffixをfalseにですか?
それだとメッセージ内に<br>などを入れなくてはならないので、美しくないですね。

html:errorsタグを拡張する方向に決めました。
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)