- PR -

Struts 複数フォームのvalidation

1
投稿者投稿内容
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2007-08-30 23:48
こんにちは。
1画面に複数のフォームがある場合にStrutsのjavascriptを利用した
validationはどのように行うのが一般的なのでしょうか?

具体的に今悩んでいるのは以下のようなやりかたをためしてるのですが、
formA,formBのjavascriptのvalidation functionが別々に出力されうまく動かないのです。
(同じ名前のfunctionが出力される。formAのfunciton require(form)とformBのfunction require(fom)が出力されうまく動かない)

1.1画面にformA、formBの2つのフォームが存在します。
 (もちろんformA、formBでは項目もちがえば、入力チェック内容も違います。)
2.validation.xmlにはformA,formBのvalidation定義を行います。
  また、formA、formBには項目名はちがいますが、必須入力の項目があります。
3.jspには以下の2行を定義します。
  ・<html:javascript formName="formA" />
  ・<html:javascript formName="formB" staticJavascript="false" />


ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2007-08-31 08:28
formタグのonsubmitにはどう書いてあるんですか?
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2007-08-31 21:52
ご返答ありがとうございます。
formのonsubmitには「return false」しか書いていません。
ボタンのonclickに対応する各フォームのvalidationを記載してます。
onclick="validateFormA(document.formA)"
onclick="validateFormB(document.formB)"


■JSPの記述に一部あやまりがありました。javascriptタグの記載は以下が正しいです。
  @<html:javascript method="validateFormA" formName="formA" />
  A<html:javascript method="validateFormB" formName="formB" staticJavascript="false" />

上記のように記載すると
@のタグ出力で
 formAの必須項目用のfunction requiredが出力され。
Aのタグ出力で
 formBの必須項目用のfunction requiredが出力されます。

function requiredが2つ出力され、formAのvalidateでもformBのvalidateでも
一方のfunctionしか呼ばれないことが問題になります。
formAのvalidateの時は@のfunction requiredが利用され、formBのvalidateの時は
Aのfunction requiredが呼ばれるべきですが、そうは動きません(function名が同じなので)



ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2007-09-04 08:48
onclick じゃなくて onsubmit に書かないと。しかも、onsubmit が false を
返したら、submit できないんじゃなかったっけ?

で、Struts のバージョンが書かれていませんが、古いです。
最新のバージョンでは、required_フォーム名 のようにフォームごとに
スクリプトが作られます。
ペーぺー01
常連さん
会議室デビュー日: 2005/05/29
投稿数: 45
投稿日時: 2007-09-04 22:17
ふ〜ば〜さんご返答ありがとうございます。
ご指摘とおりStrutsのバージョン書いていませんでしたね、
Strutsのバージョンは1.1(これは色々な理由があって古いものを使うしかないのが現状です・・・)

onsubmitにreturn falseを書いているのは、フォーム内のフィールドで
enterキーを押下した場合にPostされるのを防止するためです。
フォームのsubmit自体はjavascriptで行っているので問題ありません。

Strutsのコードみてみたのですが、ver1.1では私が書いている挙動が仕様のようです・・・
つまり、javascriptタグ事態が1つのフォームへのvalidationのみをターゲットに
しているため、今回のような場合対応できない・・・
たぶん、相当こったつくり(汚いつくり)にしないとうまくValidationはかけれなそうです。

ふむふむ、新しいVerのStrutsつかえれば問題解決するのですね;w;
>で、Struts のバージョンが書かれていませんが、古いです。
>最新のバージョンでは、required_フォーム名 のようにフォームごとに
>スクリプトが作られます。





1

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