Java と Web の デスマッチ

なぜだろう?
JavaとWebが付いたもので、まともな仕様というものは見たことが全く無い。
どこかの会社と云うことは無く、Webにいっぱいあるワークフレームの仕様のこと。
Javaに仕様と云うものは相応しくないのかもしれない。
何故ならサブクラス(または派生クラス)を作ると全く頓珍漢になってしまうことも珍しくないからだ。
なぜ、元クラス(またはアブストラクトなクラス)がこんな風になっているのか、動き、そして得られる結果(ソースの量が少ない、処理が速い、スケーラビリティがある)を衆知せずにサブクラス(または派生クラス)を作らせれば、行き当たりばったりの実装になり、あれれ?の繰り返しになってしまうのだ。
そうならないためには、インスタンスの生成や終了の図なんかは非常に重要なのだが、最近は見たことが無い。
よく聞く、MVCも、MVCの画面と画面をどう繋ぐのか?は別問題と云う厄介な問題があります。
例えばStrutsのMVCのViewであるJSPは、Modelが作りだすActionFormを差し込んでHTMLファイルを作りますが・・・
例えば画面の【検索】ボタンを押し、
いざ検索結果の画面のActionに沢山のパラメータをどうやって渡すのか?
相手のActionForm?
正解です。
でも誰が検索結果や実行結果の画面を表示するのでしょうか?
正論は、Validatorでパラメータチェックを行うことを前提に、HTML上の<form action=”検索結果画面.do”>するのが一番です。
しかし、実際に存在するデータのコートがどうかデータベースを検索しないといけない場合なんかは無理があるので、actionでパラメータをチェックした後に
検索処理を行って、ActionFormにデータを積み込んで、
forword(“検索結果画面”);
と書けばいいんでしょうか?
ま、それでもいいんですけど(笑
出来上がったら、検索結果や実行結果の画面のURLが前のURLのままなんです。(大笑
ここでF5を押すとブラウザのURLの通りに再表示しようとするので期待外れな動きになってしまいます。
バックスペースを押すともっと最悪です。
だったら、redirectすればいい訳ですが、StrutsでのsendRedirectで検索結果をパラメータで渡そうとするとURLに書き込むしかない(そもそもHTTPのredirectはurlしか渡さない仕様)ので容量的に無理があることが多いので、セッションbeanに検索結果を詰め込んで、sendRedirect(“xxxxx.do”);とすればいいのです。
勿論、セッションbeanの分量は相当なものになることは覚悟しなくてはいけませんね。(笑
だったら、
HTML上の<form action=”検索結果画面.do”>して
検索結果画面のActionの中でパラメータをチェックした後に
検索処理を行って、ActionFormにデータを積み込んで、

forword(“検索結果画面”);

と書けばよかったと思いきや、
今度は、パラメータのエラーをActionErrorに詰め込んでしまうと・・・

saveErrors(request, errors);

の様にrequestに吐き出してしまう方式なので、
redirectは使えませんから、

forward(“検索画面”);

にしてみると、
今度は、パラメータのエラーになったのにurlが検索結果画面.doのままになってしまいます。
 
面倒ですが、どんなパラメータでも渡せる便利なredirectなjspを1つ作っておくと便利です。
適当だけど、

<html:form action=”<bean:write property=”actionName” >” >

<logic:itelater id=”xxx” collection=”parameters”>

<input  type=”hidden” id=”<bean:write name=”xxx” property=”key” >”  value=”<bean:write name=”xxx” property=”value” >” />

</logic:itelater>

</html:form>

やっぱり、こっちかな?

<html:form action=”<bean:write property=”actionName” >” >

<カスタム・タグ property=”actionForm”/> ⇒ 中身を<input type=”hidden” id=”name” value=”value”>に展開してくれるようなもの。ListとかMapがあったらStrutsにあったidを振ってくれるとなおうれしい(笑

</html:form>

つまり、ブラウザとかHTTPの仕様とか知っていないと、
いや知っていても、ワークフレーム次第ではボロボロなものが出来上がります。
 
JSPを作る前にHTMLとJavaScriptでサンプルを作っていたりすると、
Actionは無いのですから、HTMLから<form action=”****.html”>とかやっているので、
こういう状況は事前に把握できません!(もう大穴ですね。
 
どうでしょう?
枯れたワークフレームといっても・・・
 
もう、罠ばっかじゃないか?って気分になりませんか?
 
という訳で
いくらりっぱな仕様書を作っても、ダメな理由になったかな?(笑
 
でも、Struts2が出てきたり、jQueryの非同期通信でパラメータチェックや検索結果をごっそり貰ってしまう手もあるし、やりようはいくらでもあります。
でも罠が無いと云えば・・・あります。
Structs2のお手軽redirectはhttps://だったら強制的にhttp://に変わります。中のソースを見るまではそんなの知らなかったぁ~。
jQueryの非同期通信は同じドメイン限定だったりPOST通信はブラウザやサーバーをえり好みします。
やはり制限はあるのです。(笑




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA