- PR -

JSP→Actionで受取ったActionFormの初期値

投稿者投稿内容
かるま
会議室デビュー日: 2006/02/23
投稿数: 5
投稿日時: 2006-02-23 11:35
JSPから送信されたデータをActionでActionFormとして渡されますが、
未入力項目であっても、Stringなら""(空文字)、数値なら"0" が
セットされてしまいます。
これを未入力項目ならセットしたくないのですが、上手くいきません。
JavaScript以外で、どうにかならないでしょうか。

コードは以下の感じです。

// ActionForm
HogeForm ext ActionForm {
String str = "初期値";
getter&setterのメソッド
}


//JSP
<form action="HogeAction">
<input type="text" name="str" value="" readonly/>
<input type="submit" value="送信"/>
</form>

// Action
HogeAction ext Action {
execute(パラメタ) {
HogeForm form = (HogeForm)パラメタのform;
 // "初期値"ではなく、""(空文字)が出力される
System.out.println(form.getStr());
return ---;
}
}
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-23 12:26
入力していないフィールドは空の文字列が埋まっているわけですから、POSTなりGETしたタイミングで空の文字が入るのは正常ではないでしょうか?
未入力、と「フィールドを空のままにしておいた」状態は区別つきませんので・・・。
未記入
会議室デビュー日: 2006/02/23
投稿数: 1
投稿日時: 2006-02-23 12:48
セットしたくないとはどういうことなのでしょうか?

こんなんじゃだめなのかしら?

フォームにこんなメソッドを持たせて。
public String showStr() {
getStr() == null || getStr().length() == 0 {
return "初期値";
}else {
return getStr();
}
}
JSPで表示するところはこっちを呼び出します。

値をに変更があったかどうかっていうならまた他の処理が必要ですが。
かるま
会議室デビュー日: 2006/02/23
投稿数: 5
投稿日時: 2006-02-23 12:56
インギさん
返答ありがとうございます。
自分のミスでvalue=""をタイプしてしまいました。

実際は以下の通りvalueを指定しておりませんが、何も入力しなくても
Actionで受取ったときにはActionFormの初期値が変更されて
しまっています。

<input type="text" name="str" readonly/>
かるま
会議室デビュー日: 2006/02/23
投稿数: 5
投稿日時: 2006-02-23 13:07
未記入さん

実は今回やりたいのが、DynaActionFormをBeanにコピーして、
このBeanを使ってHibernateでデータを取りたいんです。
Beanを丸ごとパラメタとして渡すんで、null以外プロパティに
入っていると、余計なフィルタがかかってしまいます。

できれば、Strutsのどっかのクラスラップしてできれば楽だな、
と思ってるんで、プロパティ全部には適用するのは辛いです。
未記入
会議室デビュー日: 2006/02/23
投稿数: 1
投稿日時: 2006-02-23 15:21
Strutsをそのまま使用している状態では
JavaScriptを駆使しようとも不可能です。

StrutsでPOSTデータをFormにセットしているクラスを
継承した新しいクラスを作成するのが、最も早いと思います。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-02-23 15:49
>自分のミスでvalue=""をタイプしてしまいました。
value を記載していようとしていまいと、空の文字列がブラウザがから送られてくるのには変わりありませんよ。
c9katayama
常連さん
会議室デビュー日: 2003/02/04
投稿数: 38
投稿日時: 2006-02-23 17:42
Formにpopulateしているところのソースを変えれば、
nullにすることができると思いますよ。
intの場合は、Integer持ちとかにするしかないですね。

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