- - PR -
Validaterを使うと、初期表示でエラーが表示される
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 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 22:32
私もその目的で、WEB-INF以下に置いていたのですが、
今回の質問は、そのようにするとValidaterを使うと、いきなりエラーが出てしまうということだったのですが、jspにリクエストを送るしか無い、つまり該当jspファイルをWEB-INF以下に置いたままでは不可能ということですね。 (jspファイルを完全にViewにしたかったのですけど | ||||
|
投稿日時: 2003-09-23 00:31
ここが参考になりますでしょうか?
私の教科書的存在です http://muimi.com/j/jakarta/struts/struts7.html#ActionSwitch | ||||
|
投稿日時: 2003-09-23 02:16
IWAさんのおっしゃりたいことをすべて理解できていないのですが、 入力画面を単純に表示させたいアクションと 入力画面に対して入力チェックする必要があるアクション をstruts-config.xmlファイルに別アクション(action)として 登録し、それぞれのaction要素でActionFormや 入力チェックを行う行わないの設定をすればよいということでは だめなのでしょうか。 もしこれでよければ、 「該当jspファイルをWEB-INF以下に置いたままでも問題ない。」 と思います。 検討はずれのコメントでしたら申し訳ありません。 mokeさんが書きました。 > 私の教科書的存在です > http://muimi.com/j/jakarta/struts/struts7.html#ActionSwitch 私もこのサイト利用させてもらっています | ||||
|
投稿日時: 2003-09-23 10:01
Ken-Labです。
余談です。。。 的外れでしたらなんですが、この処理は(この場合)3つのファイルに分けるのが 定石なのでしょうか?(確かにそうかもしれませんが) 自分の場合は大体1つのファイルでこの処理を組んでしまいます。 で、1つのファイルで実現している場合、WEB-INF下にJSPファイルを 設置することはあまりないのかもしれないかな、と思ったりします。 # 確認と完了動作の両方でバリデーションしないと不安なので、どちらの手法においても # 手間は変わらないと考えたのですが。。。 # 追記 書いてから思ったのですが、いっこのファイルで構成するとMVCの切り分けが難しい ですね(汗。ひょっとしてMVCにこだわるとファイル数が増大しませんか?? [ メッセージ編集済み 編集者: Ken-Lab 編集日時 2003-09-23 11:24 ] | ||||
|
投稿日時: 2003-09-23 16:38
やってみました。 [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-23 20:00
単純にjspにフォワードするだけなら、 新たにActionクラスを作る必要などありません。 org.apach.struts.actions.ForwardAction を使えばいいだけです。 以上。 | ||||
|
投稿日時: 2003-09-23 21:02
なるほど。全く知りませんでした。 struts-config.xmlに <action path="/RegistUserP" type="org.apache.struts.actions.ForwardAction" parameter="/WEB-INF/pages/system/registUser.jsp" /> を書くだけで、上に書いた事が出来ました。ありがとうございました。 | ||||
