- PR -

Validaterを使うと、初期表示でエラーが表示される

投稿者投稿内容
とおる
会議室デビュー日: 2003/09/18
投稿数: 10
投稿日時: 2003-09-22 19:34
私もmokeさんと同様の理由でjspファイルをWEB-INF以下に
置いています。

StrutsはMVCモデル2を採用したフレームワークで、
クライアントからのリクエストは1つのサーブレットが
受け付けるようになっています(Front Controller)。
これによって、共通の制御処理(セッションチェックなど)は
このサーブレットに実装することで、
一元管理することができます。

jspの直打ちを認める場合、jspファイルの先頭の方で、
セッションチェックなどの処理を行うカスタムタグを
記述する必要があったりして、
制御処理の記述が分散してしまいがちですよね。

そういった理由もあり、一部(Welcomeファイル)を除いて
どんなリクエスト(Link)に対しても、
サーブレット(ActionServlet)を経由するようにして
います。


[ メッセージ編集済み 編集者: とおる 編集日時 2003-09-22 19:50 ]
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2003-09-22 22:32
私もその目的で、WEB-INF以下に置いていたのですが、
今回の質問は、そのようにするとValidaterを使うと、いきなりエラーが出てしまうということだったのですが、jspにリクエストを送るしか無い、つまり該当jspファイルをWEB-INF以下に置いたままでは不可能ということですね。
(jspファイルを完全にViewにしたかったのですけど
moke
会議室デビュー日: 2003/09/22
投稿数: 6
投稿日時: 2003-09-23 00:31
ここが参考になりますでしょうか?
私の教科書的存在です
http://muimi.com/j/jakarta/struts/struts7.html#ActionSwitch
とおる
会議室デビュー日: 2003/09/18
投稿数: 10
投稿日時: 2003-09-23 02:16
引用:

IWAさんの書き込み (2003-09-22 22:32) より:
私もその目的で、WEB-INF以下に置いていたのですが、
今回の質問は、そのようにするとValidaterを使うと、いきなりエラーが出てしまうということだったのですが、jspにリクエストを送るしか無い、つまり該当jspファイルをWEB-INF以下に置いたままでは不可能ということですね。
(jspファイルを完全にViewにしたかったのですけど




IWAさんのおっしゃりたいことをすべて理解できていないのですが、
入力画面を単純に表示させたいアクションと
入力画面に対して入力チェックする必要があるアクション
をstruts-config.xmlファイルに別アクション(action)として
登録し、それぞれのaction要素でActionFormや
入力チェックを行う行わないの設定をすればよいということでは
だめなのでしょうか。
もしこれでよければ、
「該当jspファイルをWEB-INF以下に置いたままでも問題ない。」
と思います。

検討はずれのコメントでしたら申し訳ありません。

mokeさんが書きました。
> 私の教科書的存在です
> http://muimi.com/j/jakarta/struts/struts7.html#ActionSwitch
私もこのサイト利用させてもらっています 
未記入
大ベテラン
会議室デビュー日: 2003/06/28
投稿数: 219
投稿日時: 2003-09-23 10:01
Ken-Labです。
引用:

mokeさんの書き込み (2003-09-22 18:23) より:
目的としては入力.jsp>確認.jsp>完了.jspとして遷移するはずが
いきなり完了.jspを開かれて不正な実行処理を起動されたり、


余談です。。。
的外れでしたらなんですが、この処理は(この場合)3つのファイルに分けるのが
定石なのでしょうか?(確かにそうかもしれませんが)
自分の場合は大体1つのファイルでこの処理を組んでしまいます。
で、1つのファイルで実現している場合、WEB-INF下にJSPファイルを
設置することはあまりないのかもしれないかな、と思ったりします。

# 確認と完了動作の両方でバリデーションしないと不安なので、どちらの手法においても
# 手間は変わらないと考えたのですが。。。

# 追記
書いてから思ったのですが、いっこのファイルで構成するとMVCの切り分けが難しい
ですね(汗。ひょっとしてMVCにこだわるとファイル数が増大しませんか??

[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-09-23 11:24 ]
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2003-09-23 16:38
引用:

とおるさんの書き込み (2003-09-23 02:16) より:

IWAさんのおっしゃりたいことをすべて理解できていないのですが、
入力画面を単純に表示させたいアクションと
入力画面に対して入力チェックする必要があるアクション
をstruts-config.xmlファイルに別アクション(action)として
登録し、それぞれのaction要素でActionFormや
入力チェックを行う行わないの設定をすればよいということでは
だめなのでしょうか。
もしこれでよければ、
「該当jspファイルをWEB-INF以下に置いたままでも問題ない。」
と思います。



やってみました。
[struts-config.xml]
<action
attribute="RegistUserBean"
input="/WEB-INF/pages/system/registUser.jsp"
name="RegistUserBean"
path="/RegistUser"
scope="request"
type="xxxxx.xxxxx.contents.sys.RegistUserAction">
<forward name="success2" path="/WEB-INF/pages/system/registUser.jsp" />
<forward name="success" path="/WEB-INF/pages/other/finish.jsp" />
</action>

<action
attribute="State"
name="State"
path="/RegistUserP"
scope="request"
type="xxxxx.xxxxx.contents.sys.RegistUserPAction">
<forward name="success" path="/WEB-INF/pages/system/registUser.jsp" />
</action>

RegistUserPAction は単純にregistUser.jspへforwardするだけで、中身はありません。name="State"となっているため、Validater.xmlの評価をまったくせず、ただ表示するだけです。(<http:errors />は何も表示しない)。そして、<html:javascript formName="RegistUserBean" />を書くことで、クライアントサイドでのチェックもかかります。
registUser.jspの<form>タグにはaction="RegistUser.do" となっていますので、以後エラーがあればもう一度registUser.jspを。エラーがなければ、finish.jspへ行き、やりたい事が達成出来ることを確認しました。

となると、残る問題点は「Actionを増やしてまで、jspファイルを見せない方が良いのか」ということになりました。他との統一性という目ではこの方が良いのですが、システム的には無駄かもしれません。

#方法よりも結果で、そんなのどちらでも良いと言われるかもしれませんが・・・
とおる
会議室デビュー日: 2003/09/18
投稿数: 10
投稿日時: 2003-09-23 20:00
引用:

IWAさんの書き込み (2003-09-23 16:38) より:

RegistUserPAction は単純にregistUser.jspへforwardするだけで、中身はありません。name="State"となっているため、Validater.xmlの評価をまったくせず、ただ表示するだけです。(<http:errors />は何も表示しない)。そして、<html:javascript formName="RegistUserBean" />を書くことで、クライアントサイドでのチェックもかかります。
registUser.jspの<form>タグにはaction="RegistUser.do" となっていますので、以後エラーがあればもう一度registUser.jspを。エラーがなければ、finish.jspへ行き、やりたい事が達成出来ることを確認しました。

となると、残る問題点は「Actionを増やしてまで、jspファイルを見せない方が良いのか」ということになりました。他との統一性という目ではこの方が良いのですが、システム的には無駄かもしれません。

#方法よりも結果で、そんなのどちらでも良いと言われるかもしれませんが・・・



単純にjspにフォワードするだけなら、
新たにActionクラスを作る必要などありません。
org.apach.struts.actions.ForwardAction
を使えばいいだけです。

以上。
いわ
会議室デビュー日: 2003/09/22
投稿数: 18
投稿日時: 2003-09-23 21:02
引用:

とおるさんの書き込み (2003-09-23 20:00) より:
単純にjspにフォワードするだけなら、
新たにActionクラスを作る必要などありません。
org.apach.struts.actions.ForwardAction
を使えばいいだけです。



なるほど。全く知りませんでした。
struts-config.xmlに
<action
path="/RegistUserP"
type="org.apache.struts.actions.ForwardAction"
parameter="/WEB-INF/pages/system/registUser.jsp" />

を書くだけで、上に書いた事が出来ました。ありがとうございました。

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