△△さらにStrutsの良さを教えて下さいSession3
1 :
デフォルトの名無しさん :
04/07/04 01:09
じゃあ、Velocityでいかがでしょうか?
語ることも無いし。
5 :
デフォルトの名無しさん :04/07/04 01:16
>>1 よそすれに貼るのはいいが、あげるな。うっとおしい。
8 :
デフォルトの名無しさん :04/07/04 17:53
>>3 うーん・・・別にVelocityはフレームワークじゃないし。
Strutsと組み合わせても使えるし。
Velocityってさ、普通にJSP+Strutsのカスタムタグでも ほとんど同じ事できるよねぇ。
VelocityってWebアプリとは関係ないから
11 :
デフォルトの名無しさん :04/07/04 18:18
ベロシティーって何ですか? MIDIの音量設定ですか?
ベム! ベラ! ベロシチィ! 妖怪人間 じゃ〜ん!
14 :
デフォルトの名無しさん :04/07/04 18:27
>>11 Jakarta velocityの項を参照
>>9 でも、JSP+Strutsのカスタムタグはややこしいよね。
VelocityはJSPみたいにコンパイルが必要ないよ。 アホみたいに画面上部にJava関係のヘッダーつかないよ。 でも、Tapestryみたいにhtmlでは綺麗に表示できないよ。 そんな感じ。
17 :
いなむらきよし :04/07/04 19:52
キケー!
>>18 今となってはそうかもしれんな・・・。
ELもヒマな時に試してみておかないとなあ。
>>18 ELとStrutsタグを使い分けるのが通。
>>20 htmlタグだけね。
logicタグとか、あぼーん。
>>22 beanタグが一番つかいものにならんでしょ。
strutsタグは代用きかんだろうけど。
>>23 >beanタグが一番つかいものにならんでしょ。
>strutsタグは代用きかんだろうけど。
? ? ?
>>24 beanタグの何使うの?
bean:strutsタグみたいな、Struts固有の動きをするもの以外は不要でしょ。
>>25 >bean:struts
よくわかってないなら、黙ってる方がいいと思うよ・・・
意味がかみ合っていないような気がするけど…
ここで言うStrutsタグというのは
struts-html.tld
struts-logic.tld
struts-bean.tld あと各el
これらを指しているんだよな?
>>23 、
>>25 は何を言いたいんだ?
わかってないのは26、27あたりだと思ふ・・・・ 24がbean:strutsタグをどう使うのかは興味津々だが。 しかも、代用効かない訳じゃない。 org.apache.struts.Globalsにある定数をキーにして requestスコープに入ってるだけだから。 ソース見りゃ一目瞭然。
でもcoreタグ使おうと思ってもスコープの違いがあるから 結局beanタグ使った方が楽、というかそうできてるし。
strutsタグはvelocityっぽく使えていいと思うが。
結局、coreタグとかlogicタグとか使いたおしたところで MVCなんか全然分離できていないんだよな。 正確にはプレゼンテーションロジックが入り組みすぎてて結局よくワカンネっつーか。 それでもスクリプトレットよりはずっと見やすいからいいんだけど、 EL使いまくりのソースはそれでも汚く見えるよな。
というわけでVelocity+Struts+Spring/Seasar+HibernateでFAでしょ。
>>32 velocity使ったから解消するもんじゃないよ。
むしろstrutsのhtmlタグだけ使ってれば似たコードになるし
カスタムタグをちゃんと使って、スクリプトレット0 ついでに複雑な制御文も0
>>31 表示のためのロジックがVに入るのは、当たり前っちゃあたりまえ。
>>29 ほんと?
JSTL + ELでもちゃんとスコープの指定できると思うけど。
できればStrutsタグのみで済ませたいが、 どう考えても機能的に足りないので、JSTL使わざるを得ない
おれは逆に、Strutsに依存するものよりは、標準のJSTL+ELで済ませたい。
ELは見た目が汚いんだよなぁ… それにELったってやってることがスクリプトレットと大してかわらんし
strutsのbeanタグならかわるのか?
正直、EL使うよりはわかりやすいと思うが、そのかわりできることが少ない。 まー併用だな。
山田ナントカってつくづくいいかげんなヤツだと思ふ。
ヤツを切らない@ITも同罪。
@IT > Java Solution > Java TIPS >Eclipseで.warファイルを作成する
http://www.atmarkit.co.jp/fjava/javatips/043eclipse016.html で「.warファイルは「Web Application Resources」の略」
なんて言ってる。
Servlet API 仕様2.3(servlet-2_3-fcs-spec)によれば
SRV.9.6 Web Application Archive File
Web applications can be packaged and signed into a Web ARchive format (war)
file using the standard Java Archive tools. For example, an application for
issue tracking might be distributed in an archive file called issuetrack.war.
だそうだ。
そんなのどうだっていい
>>43 42じゃないけど、仕様と違う略ってことになるのか気になる。
「わからなかったら推測で書く」という方針でかかれた記事なんか、怖くて読めん。
>>44 同意。しかも断定調だしw
この人の書いた書籍(10日でわかる・・・・シリーズ)とか
Web上の記事をみてもとりあえず「ホントかな?」と疑ってかかるのが
習慣になってしまった・・・・
そうやって大人になっていくんだよ
オレは小人のままでいい。
皮はむけたほうがいい。
皮はパリっと焼いてたべようよ。
おまいら、細かいこと気にしすぎ。 トリビアじゃあるまいし。
山田はわざとやってるだろ。これは。
53 :
デフォルトの名無しさん :04/07/08 21:46
昔からUnix触ってる香具師なら、 arコマンドがARchiveからとったコマンド名だということを知ってるし、 tarコマンドがTape ARchiveからとったことも知ってる。 tarとコマンド体系を似せて作ったjarがJava ARchiveだということも推測できるし、 warはWeb ARchiveであろうことは当然の暗黙知である。 よって山田はアホ。
これを知ったかぶりと言わずして何を知ったかぶりというのだろう。 百歩譲って「知らない」ことは許せてもしれっと嘘書くのはどうかと。 こんな奴、普通に一緒のチームにもいてほしくない。 ましてや、何の縁でこんなエバンジェリスト的な仕事を・・・
>>54 プログラムの仕事が任せられないから、原稿書きにまわされた、とか。
56 :
デフォルトの名無しさん :04/07/08 23:52
電波マンまたやっちゃったか。。
57 :
デフォルトの名無しさん :04/07/08 23:56
またまたやなださんとやらの誹謗中傷か?おまえら名誉毀損で訴えられてもしらんぞw さっさとstrutsの話でもシコシコしとれや
これで訴えたら恥の上塗りだねw
法律も知らんのだろうな。まぁせいぜい叩きまくってこのスレ1つくらいつぶせば 十分だろう。
つまらん、雑魚どもだ
>>59 法律の問題ではない。
嘘を書いたことを法の場で明らかにされてでも訴えるかね?w
ってこと。
ヘタに動いて訴訟騒ぎ起こすよりより2ちゃんで雑魚が騒いでる程度にしておく方が賢明じゃないの?
もう一度書いておく。 山田某は、M$マンセーの@ITがJava潰しの為に遣わした刺客。
>>63 というか、単に書いている記事のレベルが低いだけ。
リファレンスとかに載っている文章を文体変えてるだけでしょ。
あれって、初心者向けには良いの?
1.2.1Betaリリースage
67 :
デフォルトの名無しさん :04/07/12 09:57
ageてなかった・・・・qz
68 :
デフォルトの名無しさん :04/07/12 22:10
Validatorを使ったiterate内のradioのチェックされているかの チェックってどうやるんですか? requireもききません。
漏れにはstrutsが向いていない…ってかEJBが向いてない ぜんぜんわかんねーもん
そだね。
73 :
デフォルトの名無しさん :04/07/16 09:06
Tomcat5.0.27リリースage
74 :
デフォルトの名無しさん :04/07/19 18:49
message-resourcesが複数あり判別のために key="xxxx"としている場合に 、 クライアント側でvalidatorを行いたい場合、 message-resourcesを判別するためのbundleを どこで、指定すればいいのでしょうか? validation.xmlの<arg0>では可変引数が無い場合指定できませんし、 実際そこにbundleを指定しても、 java.lang.NullPointerException org.apache.struts.validator.Resources.getMessage(Resources.java:209) と言われmessage-resourcesを見つけられていないようです。 validateメソッドを使う場合には <html:errors bundle="xxx"> でうまくいくのですが、クライアントでの検証の場合うまくいきません。 クライアント側での検証を同じように行いたいのです。 もしどなたか方法をご存じの方いませんか?
>>74 できねーよ。将来のバージョンで検討するって開発者MLで話題になってたことがあった。
いまプロパティファイルの分割を検討しているんだが、 むずかしそうだな・・・ とりあえず分割して デプロイ時にAntで結合すっか・・・
77 :
デフォルトの名無しさん :04/07/19 23:30
Struts でいくつかのページを管理するんだけど、例えばどのページにアクセスするときでも最初に必ず認証チェックをする。 こういう場合って全てのアクションでいちいち処理する訳じゃないと思うのですが、何か手段が用意されてるんでしょうか?
>>76 あまり分割の必要もないと思うが。
分割が必要なほど大きくなったら、ツールかXDoclet使うだろ。
>>77 Servletコンテナの認証使えば?
>>79 XDocletはプロパティファイルの生成には対応してないだろ。
それとも自分でテンプレート作れって意味?
あぁ、プロパティファイルか。
>>75 。゚(゚´Д`゚)゚。
そうなんですか。。。
ありがとうございます。
別の方法を考えます。
ちなみにサブアプリケーション化しても同じことでしょうか???
あ、それでもmessage-propertiesはデフォルトしか使えないから 一緒か。。。 クライアント側での検証メッセージは全てデフォルトにまとめる って方法しかないのかな。。。
ここでAOPですよ。
86 :
デフォルトの名無しさん :04/07/23 21:38
77ではないけど便乗質問。認証と権限判定の処理は既にあるとして、
各Actionにアクセスするたびに、既に認証済をチェックして、
未認証だったらエラーで跳ねる仕組みというのは、
>>78 のフィルタ、
>>84 のActionを継承したまとめクラスを作るほかに、
RequestProcessorを使う手などもあると思うけどどれが一番おすすめ?
利点、欠点の対比表みたいな情報があったら教えてください
そういう情報があったら俺も欲しいけど、多分無いから 自分はこう思うけど、どう? という書き方をしてはどうだろうか。
ではさっそく 1. フィルタ→Strutsに依存しない。ActionだけでなくJSPにアクセスされた 場合もフィルターすることができる。 2. ActionServletを自分で拡張して、doPost()の中に書く。 3. Actionを自分で拡張して、execute()の中に書く。 4. 自分のRequestProcessorを作って、struts-configで組み込む。 2.-4.はどれも同じに見える…
Struts依存のAPIにアクセスする必要が無いのなら、 Struts依存になる方法(RequestProcessorのカスタマイズなど)よりも Strutsに依存しない方法(フィルタなど)の方がいいと思う
Struts依存の方法を使ってしまうと、Strutsを使う必要のないところまでStruts使わないといけなくなるね。
Strutsのサンプルはカスタムタグでやってるね。 あれじゃ画面遷移時にしか判定されない。
>>91 Strutsのサンプルは、Strutsの機能を見せるのが目的だから
アプリの設計として正しいとは限らない。
>>89-90 他のフレームワークを使うときには結局それに合った仕組みを使うことに
なると思うので、現状はStruts依存でもより便利ならば気にしません
フィルタに対するActionやRequestProcessorの利点としては、
エラーで跳ねるときにglobal-exceptionでフォワード先を論理名で
指定できることかな。しかしそれだけだと弱すぎる…
>>91-92 そうだ、タムタムタグという手もあったね。それは漏れがStrutsを知らなかった
時やっていた方法で津。が、Actionに対するアクセスを止められないですね
>93 でもアプリケーション全体にかかわる処理は、 リクエストプロセッサー拡張などのフレームワークに依存する 処理にしないほうがいいと思う
>>93 > 他のフレームワークを使うときには結局それに合った仕組みを使うことに
struts依存じゃない方法なら、その「他のフレームワーク」にも依存しないので、それに合った仕組みに作り変える必要もない。
それに、「他のフレームワーク」が「それに合った仕組み」を提供してるとは限らない。
Struts使う、って前提の話なのになにトンチンカンなこと言ってんの?
>>96 なのになにトンチンカンなこと言ってんの?
99 :
デフォルトの名無しさん :04/07/25 00:55
なんでも汎用に作りたがるバカがいらっしゃるようで・・
>>99 っていうか、認証をフィルターとかコンテナの認証機構使わずにStruts独自の仕組み使ってやる意味の方がわからない。
社内に複数の業務システムがあって、ログインは独立した アプリケーションとして動いているポータル窓口で一括でやります。 各業務システムはポータル窓口から蹴られるときに隠しパラメータで ログインユーザを受け取るので自分で認証はしません (偽サイトを立てられたらどうするかという問題はありますが、 リファラーを見て跳ねる等で対応します) こういう外部からログインしたかどうかの情報を受け取って、 何かのAPIによってコンテナ自身のsecurity-constraintを有効にさせる ことはできるのかな?(あくまで認証の話で権限は別問題として) タムタムが5番目とするとこれが可能なら6番目の選択肢になるのですが…
>>103 JNDIとか使って、ちゃんとやったほうがいいと思うのだが。
リファラーで対応ってことは、あんまり重要な情報は扱わないのかな。
>>102 Struts独自の方法を使ったほうがいい場合の例をあげてくれ。
必ずスレタイから話をそらそうとする奴がいる eclipseスレでも O/Rマッピングスレでも Strutsスレでも 「もっと汎用的に」 じゃあそんなツールなんか使うな。
>>105 だから、フィルターやらコンテナ認証ではなく、Struts独自の仕組みでやったほうがいい例を教えてくれ。
別に、汎用だからいいっていってるわけじゃない。
Struts使うなら全てをStruts使ってやらないとダメなのか?
Strutsを使うべきところと、使わない方がよいところを議論するのがスレタイから話をそらしてることになるとは思わないのだが。
>>105 そういうお前はStrutsアプリケーションなら
java.util.ArrayList使わずにorg.apache.commons.collections.FastArrayList使うのか?
java.util.HashMap使わずにorg.apache.commons.collections.FastHashMap使うのか?
標準APIでこと足りるのに、特定ライブラリに依存する物を
わざわざ使う理由がわからんって言ってんだよ
>>107 そんなのケースバイケースだろ。
FastArrayListが便利だと思うときに使えばいいだけじゃん。
使って便利ならいいと思うんだけど。
Strutsなんか使わずにgetRequestDispatcher()使えば?って言ってるようなもんだぞ。
strutsを使ってる限り、どう実装しようが勝手。 個人的には拡張Actionクラスを作って処理が実現できるなら、それでもかまわないと思うよ。 問題は目的を達成できるかどうかだからね。 極端な話、WebアプリがJavaである必要すらないんだから。 ただ、そんなことしてていざstrutsから離れた時に困るだろうけど。
>>108 だろ?だから、標準API使うよりStruts依存APIを使った方が便利な場合を教えろよって言ってんだよ。
はじめはまともな意見だと思っていたが、こうしてみると単なる粘着だ。
>>111 というか、ただ話の流れを乱したいだけのバカがいるだけ。
111⊂(゚ー゚*⊂⌒`つ≡≡≡≡≡≡≡≡≡≡3
struts依存APIって例えば何
プッ Struts使ってんだからArrayListなんて使わずに FastArrayList使えばイイじゃないですか。 フィルタなんて使わずにRequestProcessor拡張すればイイじゃないですか。 何でも汎用的にしたがるヴァカが集まるスレはここですか?
>>117 この文章のどこをどう読めば面白くなりますか?
119 :
デフォルトの名無しさん :04/07/27 01:11
[tiles.xml] <definition name="xxx" path="template.jsp"> <put name="aaa" value="insert.jsp"/> </definition> [template.jsp] <%@ page contentType="text/html; charset=MS932" %> <%@ taglib uri="/WEB-INF/taglib/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %> <html:html> <body> <tiles:insert attribute="aaa" beanName="aaForm"/> </html:html> [insert.jsp] <%@ page contentType="text/html; charset=MS932" %> <%@ taglib uri="/WEB-INF/taglib/struts-bean.tld" prefix="bean" %> <bean:write name="???" property="date"/> 上記のような状態で、template.jspで指定したBean(aaForm)の中身の値を insert.jspに渡したいのですが、どのようにtilesの下の属性のJSPに beanの値を渡せるのでしょうか。aaFormの内容は動的に変化します。
解決しました。今携帯なのでどうやって解決したかはまた後で報告します。
bean:defineで解決しました。 [template.jsp] <%@ page contentType="text/html; charset=MS932" %> <%@ taglib uri="/WEB-INF/taglib/struts-html.tld" prefix="html" %> <%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %> <html:html> <bean:define id="form" name="aaForm"/> <body> <tiles:insert attribute="aaa" beanName="form"/> </html:html> [insert.jsp] <%@ page contentType="text/html; charset=MS932" %> <%@ taglib uri="/WEB-INF/taglib/struts-bean.tld" prefix="bean" %> <bean:write name="aaa" property="date"/>
最後の1行間違えた。 誤:<bean:write name="aaa" property="date"/> 正:<bean:write name="form" property="date"/> >122 ども
124 :
デフォルトの名無しさん :04/07/28 01:53
>>124 何度も紹介してるんじゃねーよ。
本当に良い物なら、一度の宣伝で話題になる。
>>124 生産性5倍にならなかったら開発費から何から「全額保障」してくれるのだろうかと...
糞ツールなのかな?
それより、ケムマキって「煙に巻く」からケムマキなのか?
>>128 うおー、そうなのか。
ドラゴンボールのビビディとバビディとブウがあわせてビビデバビデブウなのは知ってた?
ピンクのモンキーだからピンキー
struts+velocityは標準で国際化に対応しているため、クライアントのAccept-Languageを判断してリソースバンドルを開きますが、 ここで任意の言語(バンドル)を指定するにはどうやれば良いのでしょうか。 response.setHeader("Accept-Language", "en")ではうまくいかず、日本語のメッセージが表示されてしまいました。
132 :
デフォルトの名無しさん :04/08/04 11:44
age
selectタグの選択項目を設定するのって、どこでやればいいんでしょか? 単純にActionでやっちゃうと、入力チェックに引っかかってしまいます。 初期画面とSubmit時でふたつのActionつくるのもばからしいと思うのですが。
あ、あげときます。
>>131 そういうハック的な手法が好みなら、filterでRequestの方をかえなくちゃ。
137 :
デフォルトの名無しさん :04/08/07 13:10
>>133 そんな基本的なことを、まわりに聞けないお前に同情するよ。。
>>137 まわりにはStruts知ってる人がいないんです。
>>139 可哀想だね。
きっと入門書を買うお金もないほど貧乏なんだね。
で、結局、選択項目を設定する場合どうするのがいいの?
>>143 なんか、選択項目を動的に生成するサンプルはあって、入力チェックするサンプルもあるんだけど、両方やってるサンプルがないんです。
2つのアクションを作らないとだめなんでしょか。
>>144 1.選択項目を動的に生成して表示
2.ブラウザがsubmit
3.入力チェック(して結果表示)
は一連の動作ではあるけど、異なる動作だよね?
1.でActionつかおうがJSPだけでやろうが勝手だけど3.のActionとは別物だから、
> 2つのアクションを作らないとだめなんでしょか。
は意味不明の疑問。
そういう考え方なんですね。 選択項目の設定を「動作」ととらえるのにすごく違和感があって、もっと宣言的にできないのかと思ってました。
同じページなら同一のアクションでやるのもありかも。
XDocletに対応してなさげなので、魅力なし。 コンフィグエディタとか、コンフィグビジュアライザとかいらんから、XDocletタグを生成してくれるウィザードが欲しい。 JSPのハイライトとかは間に合ってるし。
Strutsを使ったアプリケーションで、アプリケーション固有の設定を読み込みたい場合は どのようにしたらいいでしょうか? たとえば、Perlで書かれた掲示板なら設定ファイルで掲示板名を変えたり、表示数を変えたりしますよね。 ActionServletを拡張してサーブレットコンテキストに起動時に読み込むようにするものなのか、 それとも必要になったときにActionで毎回読むものなのか… どういうものがセオリーなのでしょうか?
>>150 Actionはひとつのインスタンスが使いまわされるから、
コンストラクタで読み込めば毎回読むようなことはないはず。
>>151 コンストラクタ>初回
コンストラクタは引数空だった。
>>151 ばーか
>>150 Javaでも設定ファイル使えばいいじゃん
java.util.ResourceBundleとか、それを拡張したorg.apache.struts.util.MessageResourcesとか。
java.util.ResourceBundleならActionServletじゃなくてorg.apache.struts.action.PlugInの実装クラスや
javax.servlet.ServletContextListener使ってServletContextに読み込ませればいいし、
org.apache.struts.util.MessageResourcesならそのままActionクラスの中で読み込める。
155 :
デフォルトの名無しさん :04/08/10 01:27
まー普通はApplicationResource.propertiesじゃね?
Pluginだな
native2ascii使わないとダメ?
>>157 エンコードしてくれるプロパティエディタ使えば、native2ascii使う必要はない。
159 :
デフォルトの名無しさん :04/08/10 08:50
Strutsでユーザー認証ありのアプリ作ってる人、HttpSessionの管理はどこでどうしてます?
・・・なにか特別気にする必要があるんだろうか
> まー普通はApplicationResource.propertiesじゃね? そのリソースバンドル名は普通か?
なるほど、Propertyを読み込んで使ったり、PlugInではじめに読み込んで使うのがセオリーなのですね。 わかりました。皆さんありがとうございました。
164 :
デフォルトの名無しさん :04/08/11 08:38
>>160 毎回Actionの先頭でチェックするのも手間だし、普通どうやるものなのかなあと。
その気にしないやり方と言うのを知りたいのです。
>>163 servletののfilter使ってやろうとして、ちょっと詰まってしまいました。
とりあえず(略してますが)下の用に書いてみてfilterが機能するのは確認出来ました。
<filter>
<filter-name>Session Check</filter-name>
<filter-class>filter.HttpSessionChecker</filter-class>
</filter>
<filter-mapping>
<filter-name>Session Check</filter-name>
<url-pattern>/action/*</url-pattern>
</filter-mapping>
<servlet-mapping>
<servlet-name>struts</servlet-name>
<url-pattern>/action/*</url-pattern>
</servlet-mapping>
ところでこの場合当然全てのactionにfilterが効いてしまうのですが、あるactoinだけ(具体的にはlogin処理部分のaction)対象外にすることって可能でしょうか?
strutsのmappingの指定の仕方を工夫すればいけるのかなと思いurl-patternの書き方も調べたのですが、上手くやる方法が見つからず。
>>164 そもそも、認証の仕組みはどうしているのかを書かないと。
それから、HttpSessionの何をチェックしたいのか?
認証の仕組みはServletコンテナの認証を使っているのか?
自作するのもいいが、コンテナ認証並の堅牢な仕組みを
作るのは大変な手間だと思う。どこかに穴ができるものだ。
Filterの中で特定のURLパターンを除外したいのなら、
リクエストパスを取得して、その文字列を解析するしか
ないかな。
166 :
デフォルトの名無しさん :04/08/11 15:40
ApplicationResourceの値を変更したとき、Tomcatを再起動せず再読み込みするにはどうやれば良いんでしょうか。
reloadableか。自己解決。
168 :
デフォルトの名無しさん :04/08/11 16:07
struct
>166 Tomcatマネージャーから再起動
170 :
デフォルトの名無しさん :04/08/15 05:44
あちこちのスレにマルチで宣伝、ホントにお疲れ様。
逆コンパイルしてやろうかと思ってるの俺だけ?w
中に人が5人ぐらい入ってるんだよ。きっと。
174 :
デフォルトの名無しさん :04/08/16 23:37
Strutsタグのリファランス本なりサイトなりってのはないの? 入門書開いて調べるのだるいんですけど。
応用例とかじゃなくてリファレンスてんなら 本家サイトでいいんじゃん。
>>175 見てみた。用は足りるんだけど、ぶっちゃけ日本語じゃないと厳しいんです。
Strutsファンページとかで日本語化されるの待つしかないんかな?
JSPの標準タグと合わせた書籍があれば売れると思うんだけど
>>165 ありがとうございました。
返事遅れました
・認証は自前で、コンテナ認証は使ってません。
・ログインが成功した段階でHttpSessionにユーザ情報を格納しておき、それをチェックします。
> Filterの中で特定のURLパターンを除外したいのなら、
> リクエストパスを取得して、その文字列を解析するしか
> ないかな。
で、それで行くことにしました。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestUri = httpServletRequest.getRequestURI();
(後略)
}
で
/testapp/action/loginAction
みたいな文字列が取り出せるので、それをチェックすることで解決できました。
// なんかこのへんで悩んでる人あんまりいないんですね
// ぐぐっても全然出てこなかったり...
あの程度の英語が厳しい奴が 「入門書開いて調べるのだるい」 とかいってんじゃねーよ。 おまいにはオプソは無理ぽ
182 :
デフォルトの名無しさん :04/08/17 13:24
>>178 特定のURLパターンをチェックするよりも、モジュールに分割するからね。
モジュール分割なんてクソみたいな機能まだ使ってる香具師いたのか
186 :
デフォルトの名無しさん :04/08/27 18:29
tomcat+struts+velocityで、propertiesファイルが動的に更新される(書き換えられる)仕組みを作ってるんですが、 propertiesファイルを毎回動的に読み込むにはどうすればよいのでしょうか。 server.xmlのreloadableをtrueにすると、毎回読み込んではくれるのですが、再デプロイされるため、セッションが切れてしまいます
>>186 クラスローダに頼らずに読み込めばいいんじゃないかしら。
InputStream in = Hoge.class.getResourceAsStream("/hoge.properties");
としているところをFileInputStream使うとか。
そうですね。
ちょっと聞いていいですか? ぶっちゃけStrutsっていいですか? 便利さとめんどくささを天秤にかけると。
ぶっちゃけ、君が作ったソースを俺が見ると思うと、かなり便利。 それとも他のフレームワークと比べての話か?
> ぶっちゃけ、君が作ったソースを俺が見ると思うと、かなり便利。 言い得てるなぁ。。。 189が作ったものに対して、Struts並の情報量とノウハウを提供できるのなら話は別だけどね。 情報量とノウハウ、それらを既に持っている技術者の数を考えるとStrutsに優るフレームワークってあるのかな。
そうかなぁ。 なんかマッピングがStruts-config.xmlとかvalidator.xmlとかに分散してて、めんどくさそうだけど。 他に同じようなフレームワークがないから、という消極的な理由でしか、便利といえないような気がするんだけど。
??? 「マッピングが分散してる」とはどういうこと?
194 :
デフォルトの名無しさん :04/08/29 04:32
>>194 知ってるけど、問題が出たときに、やっぱりいろんなところに原因が分散することにはあまり変わりがない気がする。
使わないよりかなりマシだけど。
フレームワークとして、あまりよろしくない設計になってる部分が多いと思うんだけど。
ActionFormが継承ベースであることを筆頭に。
とにかく
>>191 みたいな、「他に優れたものがないからStrutsマンセー」みたいな思考停止状態になってるような気がして嫌。
>>195 >ActionFormが継承ベースであることを筆頭に。
それの何が問題なの?
俺はStrutsは機能が足りないところが不満。
>>196 191のどこをそう読んだらそう思えるんだ?
他に普及しているものがないからってんなら分かるけど。
一人で使ってるなら、俺流フレームワークを改良していけば
一番使いやすいんだろうけどね。
人数を増やすために低スキルの派遣を呼んだりした時に、
面接で「Struts出来る?」「Struts勉強しておいてね」
で通じるんだから便利だ。
>>196 みたいにStrutsよくわからないから攻撃的になるってのは、
端で見ていて可哀想だ。
>>199 人数を協力会社から集めるときに便利ってのは確かにそう思う。
独自フレームワークだと,研修から始まって設計から実装の仕方まで
教えなきゃならんから…(もちろん,その囲い込みで商売しているところにとっては
今後は厳しい状況になるのかも)
けど,Strutsを使っているとはいえそれをベースに作りこんでいるところは多いわけで,
その部分については独自フレームワークといってもいいから,結局そのコストは
ゼロにはならんのだなあと思ったりもする。
>>200 独自フレームワークのとこで仕事してるけど、
>研修から始まって設計から実装の仕方
なんて教わったことな(ry
というか、面接では「Strutsに似たフレームワークです」
と聞いてたのに実際は似ても似つかない糞だったってのが腹立つ。
sessionスコープにform入れたら、なんか妙なエラー出るし。 formが無かったら勝手に作ってくれるような気がしてたけど、エラーになるような。
>>202 セッションに入れるなら素直に別Beanを用いるべき。
実際はフォーム名をキーとしてセッションに入ってるけど
ActionFormの管理はStrutsに任されてるし、
アクセスはActionからに限ったほうが無難。
>>200 Strutsも、協力会社からかきあつめてきたようなヤツがちゃんと使えるほど浸透してるの?
後からかきあつめてきたやつが細部まで知っておく必要もないとは思うが、それならStrutsじゃなくてもあまり変わらん気が。
結局200の言うようにラップして使うなら。
>>199 低スキルのやつに「Struts勉強しておいてね」で間に合うのなら、別のフレームワークでも大差ない気がするが。
ほんとに「Struts出きる?」で出きるといったヤツがStrutsできてるの?
少なくとも、他のフレームワークよりは普及・浸透しているだろう。 できないヤツに教えるにしても、Web上や書籍の情報は豊富だしね。
struts 1.2.2 オフィシャルリリース age # 忙しくて変更について行けない...
>>207 でも、パッケージミスがあったりJDK1.3で動かなかったりで
もめてるね。すぐに1.2.3になりそう・・・・
>>205 分かった。君は「Tapestry勉強しておいてね。」って言うことを許す。
>>207 技術についていけなくなった負け犬の遠吠え・・・
Strutsにあらずんばフレームワークにあらず。 似非Java技術者は去れ。
>>192 俺も最初はそう思っていた。けど設計がころころ変わらないなら
struts-configなんてそうそういじるもんでもないし
まあ使ってみるくらいの時間は割いて損はないんじゃない
>他に同じようなフレームワークがないから、という消極的な理由でしか
正直、Webがいつまで続くかも分からない。あっというまにリッチクライアントに
移行するかもしれんしね。だからWebフレームワークにあれこれ手を出して比較検討する、
という余裕はないなあ
>>213 ま、ぶっちゃけ、JSFが定着すればおわりかと思ってんだけどね。
何の気なしに wikipedia の Apache Struts の項を見てみたら、 >フレームワークにはModel-View-Controller (MVC)アーキテクチャーが適用されている。 >類似したフレークワークとしてJSF(Java Server Faces)がある。 ってなってて、これどーなのよと思った。 (両方MVCですよ、ってことだとは思うんだが・・)
え、なんかおかしい?
JSFはStrutsの類似品ですかΣΣ(゚д゚lll)
StrutsとJSFは同じ人が作ってるからねぇ・・・ その人物はTomcatのリリースマネージャだったこともあるし。 Craig R. McClanahan氏。
類似品つーか、かぶってるつーか。
まあそれは、あんまんと肉まんは似ているか否かみたいな議論だべ
いや、豚まんと肉まんでしょ >中身は大して変わらない
君たち。豚まんの中に肉は入っているのかね?
ほんでもstruts-config.xmlよりfaces-config.xmlの方が 100倍読みやすいと思うのオレだけ? 後出しジャンケンの勝利ってヤツ? あと、UIViewRootの思想って使い勝手がいいと思うが。
>>225 XDoclet使ってるからstruts-config.xmlなんて読まない。
XDocletでstruts-config.xmlつくるっていうけどさー。 大規模システムでもつかえんのか? やたらメモリ喰ってつかえねーって話聞いたんだけど?
>>227 ソースファイルが多いとOutofMemoryでもくりです。
数人規模の小プロジェクトで使うが吉
227、228 はヒープサイズをいじれないド素人。
大規模プロジェクトでstruts-configをみんなでいじるほうが怖いね。 たとえ分割したとしても。
>>229 どこで設定するのでしょうか?教えちください。
>>231 横から口出してすまんが、漏れはXDocletでOutOfMemoryの経験が無いので純粋に聞きたいんだが、
それは本当にヒープサイズの弄り方がわからないのか?
それともヒープサイズ大きくしたって意味無いよ、ってことを皮肉ってるのか?
それとも他の皮肉か?
-Xms -Xmx
>>229 ちっこいシステムしか担当したことないんですね?
-Xms -Xmxを設定してますが、ソース数と比例して増やす必要があり、
使い勝手がいいとは思えません。
>>233 「大きいシステムでは-Xms -Xmxを設定するぐらいならStrutsの設定ファイルをみんなでいじるほうが使い勝手がいい」ということ?
ほんとかよ。
>>234 ちがうって
有償のソフトウェアつかってるの
フリーのしか使えない貧乏会社のエンジニアはだまっとけ
まぁ、何でも金かけりゃいいってもんじゃねぇ
金かけたシステムが良いシステムとは、必ずしも言えない。
239 :
デフォルトの名無しさん :04/09/09 10:19
技術が足りなきゃ、金かけようが何しようが結果に大差なし。
>>239 いや、残業代もでるし、休みもとれるし、給料いいし、責任ないし、プロジェクトの結果には大差ないけど、生活には大差ある。
先のことはわからんがねw。
241 :
デフォルトの名無しさん :04/09/09 10:28
>>233 ちなみに、クラス数って、どのくらいなの?
で、235は何を使ってるの?
お金のかかるツールで、大量のクラスが扱えて、大人数で編集してもコンフリクトしないstrtus-config編集ツールってなに?
245 :
デフォルトの名無しさん :04/09/10 06:57
>>235 俺も知りたい。
何使ってるか教えてください。
246 :
デフォルトの名無しさん :04/09/13 18:56:25
既存のhtmlタグを壊してstrutsのタグにするメリットを教えて下さい。
>>246 君がメリットを感じないのならわざわざ使うこと無いよ
>>246 スクリプトレット(<%=value%>)を避けるためではないか。
使うかどうかはおいといて、 html:formやhtml:javascriptのようなコアなやつ以外にも 国際化対応とかhtml:linkがあるじゃん。
とりあえず、ELとJSTLで間に合うやつは、使う必要なし。
252 :
デフォルトの名無しさん :04/09/14 11:09:44
すみませんが どなたか教えてください。 html:image タグでイメージボタンを作りたいのですが、ボタンの大きさを 指定することはできないのでしょうか? 普通のHTMLだと width="80" height="30" のように指定できますよね? これをどのように指定するのかが わからないのです。
253 :
デフォルトの名無しさん :04/09/14 18:54:28
<form > <input type="image" src="../img/xxx.gif" name="submit" alt="ボタン"></input> <input type="image" src="../img/xxx.gif" name="submit" alt="ボタン2"></input> </form> これと同じことをstrutsでやるにはどうしらよいでしょうか。 <html:submit name="submit">では怒られてしまいます。 1ページにボタンが2つあり、それぞれの値を取りたいのです。
254 :
デフォルトの名無しさん :04/09/14 18:57:21
訂正します。 <input type="image" src="../img/xxx.gif" name="submit" value="ボタン"></input> <input type="image" src="../img/xxx.gif" name="submit" value="ボタン2"></input> こうです。 上のボタンが押された時は、submitに「ボタン」が入っていて、 下のボタンが押された時は、sumibtに「ボタン2」が入っていてほしいです。 <input type="submit" name="submit" value="ボタン"></input> <input type="submit" name="submit" value="ボタン2"></input> 普通にHTMLで書けば成功しました。
256 :
デフォルトの名無しさん :04/09/15 07:42:17
初期値を設定するフォームについて質問。 データ更新なんかのときに @既存データを初期値として設定するアクション(path="first") A選択項目を設定するアクション(path="set") B入力後の処理を行うアクション(path="proc" input="set.do") と3つのアクションを作ると思います。 このとき、Aのアクションに直接アクセスされないようにするにはどうすればいいですか? set.doのようにして初期値が設定されてないフォームが表示されることがないようにしたいです。
>>256 TransactionTokenを使う
258 :
デフォルトの名無しさん :04/09/15 12:04:33
>>255 すみません、アクションフォームでどうやってvalue値を受け取ればよいのでしょうか。
import org.apache.struts.util.ImageButtonBean;
private ImageButtonBean submit = null;
public ImageButtonBean getSubmit(){
return ( submit );
}
public void setSubmit( ImageButtonBean submit ){
this.submit = submit;
}
これでよいのでしょうか?
>>257 それはちょっと違うので。
Aがset.doでブラウザからアクセスできないようにしたい。
@からのフォワードや、Bでのエラーじの入力だけで使いたいです。
とりあえず、Aのpathを/WEB-INF/setにしました。
261 :
デフォルトの名無しさん :04/09/16 10:04:10
2ちゃんねるの個々のスレッドの書き込み数は、そのスレッドで扱う事柄の メジャー度や人気度、普及率を表していると思うのだけど、 1日10個もないということはstrutsはまだ全然普及していないと考察する。
>>261 とんだ見当違いだな。何と比較しているんだか。
・スレが立っているうちでは一番書き込みが多い
・複数のスレがある(WebProg板にも)
2ちゃんねるの個々のスレッドの書き込み数は、そのスレッドで扱う事柄の
メジャー度や人気度、普及率を表していると思うのなら、Strutsは一番じゃないのか?
それとも、これ以上に書き込み数の多いフレームワークがあるのか?
>>256 私は、 Struts 側の機構として、そういう風にアクションを完全に制御する手段は用意されてないと理解しています。
やるならサーブレットコンテナ側の filter とか。
と書こうとおもってたら、WEB-INF 以下に入れる方法があったか。。。
かっこわるいけどforwardしかさせないファイルは、 ファイル名の先頭にアンダースコアを付加してる。 単純なルールだからfilterで弾けるし。
265 :
デフォルトの名無しさん :04/09/16 13:14:22
strutsで変数のHTMLタグを全部除去する方法ってありますか?
266 :
デフォルトの名無しさん :04/09/16 14:14:47
表形式のJSP で、行数が可変で、各行にラジオボタンがある場合、 ----------------------------------------------------------------- <logic:iterate id="userData" name="userInfoBean" property="userList" indexId="index"> <input type="hidden" name="id<bean:write name="index" />" value="<bean:write name="userData" property="userID" />"> <input type="radio" name="accept<bean:write name="index" />" value="0">社員 <input type="radio" name="accept<bean:write name="index" />" value="1">非常勤 <input type="radio" name="accept<bean:write name="index" />" value="2">常駐 <br> </logic:iterate> ----------------------------------------------------------------- とやると、 ----------------------------------------------------------------- <input type="hidden" name="id0" value="10001"> <input type="radio" name="accept0" value="0">社員 <input type="radio" name="accept0" value="1">非常勤 <input type="radio" name="accept0" value="2">常駐 <br> <input type="hidden" name="id1" value="10002"> <input type="radio" name="accept1" value="0">社員 <input type="radio" name="accept1" value="1">非常勤 <input type="radio" name="accept1" value="2">常駐 <br> <input type="hidden" name="id2" value="10003"> <input type="radio" name="accept2" value="0">社員 <input type="radio" name="accept2" value="1">非常勤 <input type="radio" name="accept2" value="2">常駐 <br> ----------------------------------------------------------------- みたいなHTML を吐き出すのだけど、このとき、ActionForm はどんな風に書けば いいのかな?
>>261 普及して安定すると、かえって投稿は少なくなるよ。
XDocletの@struts.validatorのarg1valueなんかを使うと、arg1のnameにはdependsに指定したものがそのまま使われます。 そうすると、dependsに2つ以上指定したときにうまく動きません。 arg1のnameを指定する方法はありませんか? というか、みなさまどうやってますか? XDocletがメンテナンスされてないのも気になるけど。 やっぱSGenかな。
>>270 つまり、nameの指定はあきらめろと。
272 :
デフォルトの名無しさん :04/09/17 14:21:38
糞なもののよさをわかろうとしても無駄
そーいや昔アクセンチュアのフレームワーク使ったことあったな。 2年前にしちゃ出来は良かった気が。なんつーなまえだっけな〜
>>271 ハァ? @struts.validator-args でname指定されるんですが何か?
>>275 ヘルプ見てもわからんのだけど、どうやるの?
>>275 できないだろ。
>>269 dependsにルール名を複数指定するんじゃなくて、
@struts.validator を2つとか複数書くんだよ。ドキュメントにも(0..*)と書いてあるだろ?
あ、@struts.validatorでtypeに複数指定するんじゃなくてdependsごとに@struts.validator書くんだね。 いままで @struts.validator type="required, maxlength" ってやってたからだめなんだ。 @struts.validator type="required" @struts.validator type="maxlength" arg1value="${var:maxlength}" ってやったらうまくいった。
って、すでに
>>277 が答えてくれとった。
ところで、Struts1.2で、XDoclet1.2.1使って大丈夫ですか?
strutsconfigxmlタスクのversionには1.1を指定するしかないけど
なぜ未だに配布アーカイブファイルの名前がjakarta-struts-x.x.x.zip/tar.gz なのだろうか。 Antはとっくにapache-ant-x.x.x.zip/tar.gz なのに。
281 :
デフォルトの名無しさん :04/09/24 19:56:05
Struts難しいと思ったんですが、僕が頭悪いのでしょうか?
>>281 絡む要素が多いからな。
慣れるまでのコストは高い。
最初に良いチュートリアルに出会えばいいんだけどね。
283 :
デフォルトの名無しさん :04/09/26 00:46:59
Strutsって、画面(JSP)の項目とアクションFORMビーンのフィールドが1対1で対応づいてますよね? 画面がヘッダ部と明細部にわかれてて、1対Nの画面を アクションFORMビーンに関連付けるときってどうやったらいいんですか? 伝票番号が1個あって、それに付随する明細情報がN行あるような画面です。 まさか明細行の数は可変です。 今回初めてだから、すごいアフォなこと言ってたらゴメン。
284 :
283 :04/09/26 00:49:04
↑ 「まさか明細行の数は可変です。」 「まさか」は削除して読んで下さい。
ActionFormはあくまで入力に必要なものなので、 出力には好きなオブジェクト(Bean)をつかってもいいです。 もちろんActionFormもBeanに違いないので、 そのN項目を返すGetterをつくってあげれば使えます。
286 :
283 :04/09/26 02:08:47
>>285 レスありがとうございます!
・あらかじめNの最大値分のGetter(フィールド)を作る
・ActionFormでは管理せずに、Actionクラスで画面の値を取得し、別のBeanを作成する
のいづれかといった感じなのでしょうか?
(後者の場合はActionFormはほとんど意味をなさないことになりますね。たぶん)
List
仕事でStrutsでWebアプリ作らされました。 リクエストをまたがって情報を保存する機構がデフォで無い。 forward するときパラメータを書き換えられない。 タグライブラリがちょぼい。 同じラベルのボタンの処理を分ける仕組みが無い。 日本語対応問題。 など正直使いにくくて、かなり手を加えないと使い物にならなかったのですが。 これが人気な理由って何なんでしょうか? (人気あるらしいというだけで早々に採用を決めてしてしまったPLを恨みます・・・。) 確かにシンプルなサブミットフォームとかならかなり使えそうですが、 その程度なら Struts 使わなくても困らないし・・。 .NET WebForm を使ったことがある自分にはかなり見劣りしてしまいます・・・。 なんか実は自分が無知で詰まってたところがスパッと解決されてたりしたら泣けてくる・・・。
>>286 過去レスで何度かでてるけど、
formの入力コントロールのproperty属性を同じ値(名前)にすれば、
ActionFormのsetter/getterで配列としてやりとり可能なので、
これを利用できるかな。
>>288 わりと同意
フレームワークといってもStrutsだけの操作でアプリ構築できないから。
基本のServletで簡単に済むことまでラップしない方針なんだろうけど。
> リクエストをまたがって情報を保存する機構がデフォで無い。
一連のリクエストをひとつのものとして扱う仕組みは絶対いる。
というか、ないのに愕然とした。
その上でstruts-config.xmlからサイトマップを出力できればよし。
> forward するときパラメータを書き換えられない。
Servletはリダイレクトせずフォワードするのが基本だから、
request変数をつかえということでしょうね。
なので他アプリとの連携ではURLを直接扱うことに……。
> タグライブラリがちょぼい。
このへんはELや外部ライブラリに移行していくんでしょうけど、
<html:messages>回りはもうちょっと扱いやすくしてほしいです。
> 同じラベルのボタンの処理を分ける仕組みが無い。
よくわかりません
> 日本語対応問題。
FilterでUTF-8に統一させるのが楽ちんです。
外字が絡まない場合はですが。
>>288 薄いコントローラフレームワークなので手を加え易い、ってのは
Strutsのメリットでもあると思うが。そのままじゃ使いにくいのは確かだと思う。
共通系作る人がある程度がんばらないと。
人気の理由は、デファクトスタンダードになってるから人を集め易い、とかだろ。
>>289 なるほど。これって、各項目で格納順(インデックス)がずれたりしないのかな?
わかりました!ちょっとやってみます!
>>292 Bean のリストをフォームに持たせるんじゃ不満なのか?
294 :
デフォルトの名無しさん :04/09/27 09:37:42
>290 > 同じラベルのボタンの処理を分ける仕組みが無い。 <html:form> <html:text /> <html:submit property="submit" value="送信" /> <html:textarea /> <html:submit property="submit" value="送信" /> </html:form> フォームの中にボタンが二つあって、それぞれで処理を分けたい時、 どうするのってことだと思います。推測ですが。
同じラベルのボタンで処理が違ったら、ユーザーは迷惑だね。
>>295 [ 項目A ][参照]
[ 項目B ][参照]
[ 項目C ][参照]
:
といった感じのUIはWebでなくても頻繁に使用されていると思うが。
むしろこの参照ボタンのラベルが一個一個違ってたらどーよ。
>>296 webの場合、ひとつのフォームのラベルが同じsubmitは結局判別できないと思うが。
strutsうんぬんの問題ではないよ。
javascriptでhidden項目切り替えるか、フォームを複数にするか。
基本的にはスレ違い。
>>297 submitのnameを変えれば出来ると思うが。
Strutsはそれ(nameによるディスパッチ)に対応してない。
> リクエストをまたがって情報を保存する機構がデフォで無い。 これってどういうものをイメージしているのでしょうか? セッションを使うか、イヤならhiddenに入れればいいような気がするが。
>>301 入力の文字エンコーディング指定のことだろ。
別にStrutsでもStrutsじゃなくても同じだと思うけど?
>>302 フィルターかますだけだから、そんな問題でもないねぇ。
>>296 ボタンごとにフォームを変えるってのはだめですか?
まさか同意する人がいるとは思わなかった・・・。
セッションは同じフォームなら別画面でも共有されちゃうので使えません。
ブラウザで新しいウィンドウ開いたりとか。
hidden に全部入れるのも現実的でなかったので、フォームごとに ID を割り振って、
hidden にはその ID を入れておくことでリクエストをまたがっても情報を復元できる仕組みを作りました。
>>301-303 マルチパートとかすこし面倒でした。
Strutsは送られてきたデータをActionFormに自動格納するのだから
エンコーディングまで面倒見るべきだと思います。
>>304 フォームを分けたら、そのフォームに含まれてるコントロールの値しか送信されないので使えません。
どのボタンを押しても、画面全部の情報が送信されないといけないんです。
>>305 > hidden に全部入れるのも現実的でなかったので
オブジェクトままシリアライズしてエンコードしてhiddenはりつけで。
> Strutsは送られてきたデータをActionFormに自動格納するのだから
> エンコーディングまで面倒見るべきだと思います。
フィルターで処理するべきだな。
通信の問題なのだからサーブレットに処理が渡る以前に処理するべき。
> どのボタンを押しても、画面全部の情報が送信されないといけないんです。
じゃあ、JavaScriptでhidden切り替えで。
>>305 > hidden に全部入れるのも現実的でなかったので、フォームごとに ID を割り振って、
> hidden にはその ID を入れておくことでリクエストをまたがっても情報を復元できる仕組みを作りました。
公開してください!
まじでお願いします。
>>305 <html:submit property="処理1" value="OK"/>
<html:submit property="処理2" value="OK"/>
これじゃダメか?
押されたボタンの「name」で処理を判断する。
Struts1.2から導入されたMappingDispatchActionとか、
Struts in Actionに掲載されてるFindForwardActionがこんな感じ。
あぁ、ガイシュツだった。ハズカシ。
>>307 それよりも、やりとりするデータをMapにほりこんで、シリアライズしてエンコードしたものを渡してやると、戻るときにちゃんと戻れるからいいぞ。
312 :
デフォルトの名無しさん :04/09/28 09:16:01
EclipseでStruts使っているのですが、JSPを色々いじっている間に、 いつのまにかフォームのパラメータがアクションフォームに渡らなくなってしまいます。 なにか原因はあるのでしょうか。 いちいちプロジェクトを作り直すと直ったりします。
Strutsって、いつまで使えますか? いつからJSFの波がくるでしょか?
>>313 あと2年ぐらいかなぁ。
今のJSFは2年ぐらい前のStrutsの状況に似ている感じがする
>>307 そんなことしたらクビになる
>>308 1.2 からは導入されているのですね。(知らんけど・・・)
>>310 数百MBのファイルをアップロードした後、もし同名ファイルがサーバー上にあれば
上書きするか名前を変えるかキャンセルできるような処理の場合、毎回数百MBがCS間でやり取りされるのでしょうか?
>>311 フォームの ID はセッションごとに分断されているので、他人の情報を見たりということは出来ません。
意図的に過去の情報を表示することは出来ますが、ブラウザの戻ると同じです。
データそのものはやり取りしないのでクライアントに書き換えられる心配はありません。
>>315 > 数百MBのファイルをアップロードした後、もし同名ファイルがサーバー上にあれば
> 上書きするか名前を変えるかキャンセルできるような処理の場合、毎回数百MBがCS間でやり取りされるのでしょうか?
そんだけ大きいファイルだと、どっちにしろ一時ファイル作るわけだから、そのファイル名でいいんでは?
Tilesってどんなときに有用ですか? ほとんどの場合jsp:includeでインクルード先を動的に切り替えればいいような気がするんですが。
>>317 ・レイアウトも共通化したい場合
・レイアウトと共通部品の組み合わせを継承して差分だけを定義したい場合
・struts-config.xml の<forward>要素にJSPファイルのパスを直接書きたくない場合
<jsp:include>だとレイアウトの共通化は無理だね。
レイアウトの共通化ってどういうこと? <td> <jsp:include page="${left}"> </td><td> <jsp:include page="${right}"> </td> みたいな感じ?
>>319 考え方としてはまあそんなもん。
319で書いてあるようなレイアウトを定義したテンプレートとなるJSPを作って、
left や right の箇所にどのリソースをincludeするのかは XML形式の設定ファイルに書く。
で、その設定を継承した設定をさらに作ることもできて、right だけオーバーライドする、みたいに
差分だけオーバーライドした設定をどんどん作ることができる。
ページの数だけ定義書かないといけないのが、かなりめんどくさいんだけど。 ほとんどの場合、1〜3パターン程度のフレームがあって、その中に数十のページが収まるっていう感じだよね。 そうすると、いちいちタイル定義書くのってめんどうな気がする。 たとえば*.tmplateを処理するサーブレット作って、*.template→*.jspを$rightに入れてテンプレートJSPにフォワードっていう仕組み作ればいいんじゃないかな、と。
>>321 Tilesはそれもできるぞ。定義は設定ファイルだけじゃなく、
JSPページ上で実行時に動的に作ることもできる。
ついでに*.htmを処理するサーブレットを作って、*.htmを*htmlに変換したものを$rightに入れてテンプレートJSPにフォワードっていう仕組み作れば、静的なHTML置いて拡張子を*.htmにしてアクセスするだけでテンプレートが使える。
>>322 あんまりTilesの意義ってなくなるような。
includeでいいじゃん。
>>324 Tilesはレイアウトの共通化ができるんだってば。includeだとできないだろ。
>>323 リクエストがPOSTの場合は静的HTMLだと動作しないぞ。
動作してしまうコンテナも存在するが。
>>325 レイアウトの共通化が319のようなものなら、できるよね。
そうではないレイアウトの共通化ってなに?
TomcatではPOSTでもちゃんと動いた。
「動作してしまうコンテナ」がTomcatのことなら、全く問題はない。
ってかPerlでもPHPでもレイアウトうまくまとめる人もいるんだから includeだってやってでにないはずはないだろう それとも「レイアウト」「共通化」の考え方が違う?
> 「動作してしまうコンテナ」がTomcatのことなら、全く問題はない。 それはおまいにとって問題ないだけだろう。
ていうか、リクエスト受けるのはサーブレットだからPOSTだろうがGETだろうが関係ないと思うんだけど。 どういうルールで、POSTだったらサーブレットマッピングが無効になるの? それともPOSTのときはincludeで静的ファイルを読み込めないとかあるの?
>>327 319のようなものだと思ってるんだけど。
つまりjakarta.apache.orgで言えば、上部にタイトル、左にメニュー、右にコンテンツがある。
で、タイトルは共通で左のメニューは1〜3パターン、コンテンツはたくさん。
>>329 <jsp:include>はRequestDispatcherが処理するから。
元のリクエストがPOSTだったらインクルードされる側にもPOSTのリクエストが転送される。
「サーブレットマッピングが無効になるの?」なんて聞いている時点で
全くわかってないだろうけどねw。サーブレットマッピングなんてどこから出てきた?
わかりにくいようだから
>>323 に書いた静的HTMLにテンプレートを適用する流れ
・ファイルは拡張子htmlで保存しておくとする
1.*.htmをサーブレットにマッピング
2.サーブレットでhtmをhtmlに変換してrequest.setAttribute("file", ***)
3.テンプレートJSPにフォワード
4.テンプレートJSPで<jsp:include page="${file}"/>
拡張子htmでリクエストすると、htmlファイルにテンプレートがついたものが表示される
>>333 それだとPOSTでの動作は保証できないと何回言えば(ry
<jsp:include page="hoge.html"/> としたら、POSTのときはうまく動かないコンテナがあるってこと?
>>336 そういうこと。
<jsp:include>では、"実行時"にincludeする側からincludeされる側にリクエストが転送され、
そのレスポンスデータが挿入される。このとき、コンテナの実装によっては元のリクエストが
POSTだった場合はincludeする側からincludeされる側に転送されるリクエストもPOSTになる。
従って、includeされる側もPOSTを受け、レスポンスを返せるコンポーネントである必要がある。
どうしても静的ファイルをincludeしたいのなら<%@ include %>を使うべき。
こちらはJSPコンパイル時にマージされる。
>>338 337に挙げたJSPの仕様を見る限りでは
「If the resource is static, its content is included in the calling JSP page.」
となってるから、問題ないと思うんだけどねぇ。
実際にPOSTで静的ファイルjsp:includeしたときに動かないコンテナってなに?
「The results of including static and dynamic resources are quite different.」 とも書いてあるし。1.0の仕様には明確な記述はないけど。1.1から追加されてる。
341 :
デフォルトの名無しさん :04/10/04 09:50:11
TigerのAnnotation使って@Overrideとか書くと、XDocletがエラーって文句いってくるんだけど、どうしたらいいんだろう? executeには@Override書いておきたいんだけど。 StrutsにはXDoclet必要だし。XDoclet2ってどうなってるんだろうか。
>>341 AntビルドファイルにexcludedTagsを指定するんじゃダメなの?
>>342 パースエラーになるから、そういう話ではなさそうだけど。
excludedTagsってJavaDocタグに対してのものでしょ?
そもそもAnnotationに対応していなさそう。
>>343 ああ、そうか・・・
Tigerはまだまだ周辺ツールがととなわないね・・・・
というか、XDocletの動く気配がないのが一番不安。
>>345 XDoclet2はまだ気配が見えないねぇ・・・
1.2系は1週間ぐらい前にRCがリリースされたりとメンテされてるみたいだけど。
>>346 え、マジでですか?
sourceforgeは更新されてないし、codehouseには何もないし、どこに行ってるんでしょうか?
サイトやドキュメントのメンテはいい加減だね。>XDoclet
Strutsのバージョンが1.2指定できるようになって一安心 web.xmlも2.4指定できるのかな。 @Overrideはもちろん通らず
ところで、
>>338 はどうなったんだろうか。
仕様みる限りそうではないように読めるんだが。
353 :
デフォルトの名無しさん :04/10/04 21:48:09
Action側で、 userListという(id=hogeId,name=hogeName)の組み合わせの Map型リストをsession.setAttribute("userList",userList)にセットして、 jspで <html:select property="user"> <html:option value="hogeId">hogeName</html:option> 〜 <html:option value="hogeId">hogeName</html:option> </html:select> という感じにしたいのですが、どうすればできますか。 value値にhogeIdを入れて、表示に名前を入れたいのです。 tomcat4ですので考慮お願いします。
WebLogicに切り替えてセッションBean
LabelValueBean使えば
うん。LabelValueBeanとlogic:iterateとhtml:optionCollection使えばできるね。
JSTLが使えるところはStrutsのタグ使わないのがいいけどな。 好みだけど。
358 :
353 :04/10/04 23:09:29
具体的にコード書いて頂けると嬉しいのです。 お人よしの人、お願いします。
[JSP] <logic:iterate id="list" name="xForm" property="userList"> <html:optionCollection name="xForm" proeprty="checkBoxName" value="value"><bean write name="list" value="label"></html:optionCollection> </logic:iterate> [ActionForm] private List userList = new ArrayList(); private String[] checkBoxName; とそのgetter,setter [Action] List list = new ArrayList(); list.add( new LabelValueBean( "ユーザー名1", "ユーザーID1" ); list.add( new LabelValueBean( "ユーザー名2", "ユーザーID2" ); list.add( new LabelValueBean( "ユーザー名3", "ユーザーID3" ); form.setUserList( list ); // 選択済みにするならば form.setCheckBoxName( new String[]{"ユーザーID1"} ); こんな感じだと思う。 なんもみないで書いたからたぶんどっかまちがってる気がするけど。
うわ。所々括弧閉じがぬけてる_| ̄|○
おひとよしのひまじんっているものだねぇ
自分も前に作ったやつのコピペしようとしたら先越されてた。 っていうか大した手間ではない>361
おめぇら、すげぇな!
おれはJSTL版出そうかと思ったけど、struts-elタグの使い方調べるのがめんどくさくてやめた
まちがえた。 上の例はcheckboxつくるときの例だった。しかもhtml:optionsCollectionをhtml:multiboxにおきかえないとだめ。 でもやってることは近いので参考に、という程度にはなるかも。
自分で考えたらできましたので、一応ソースを張ります。 <html:select property="userId"> <logic:iterate id="row" name="users"> <bean:define id="id" name="row" property="userId" /> <html:option value="<%= String.valueOf(id) %>"><bean:write name="row" property="userName" /></html:option> </logic:iterate> </html:select>
JSTL使えばこんな感じかな。 struts-el使うようにする必要があるけど。 <html:select property="userId"> <c:forEach items="${users}" var="row"> <html:option value="${row.userId}"><c:out value="${row.userName}"/></html:option> </c:forEach> </html:select>
これでハッとしてグー。 <select name="userId"> #foreach($row in $users) <option value="$row.userId" #if($row.userId == $xForm.userId) selected #end> $row.userName </option> #end </select>
>>369 なかなかツッコミが入らなくてどうしようかと思ったよ。
しかしhtmlで元絵作ってアプリに仕上げるような場合はVelocityに限るね。
371 :
デフォルトの名無しさん :04/10/11 13:15:07
Strutsで開発するとき、クラス図とか作ってますか? 画面単位にクラスを作って、単にDBにアクセスするだけしかなくて、 名前もTS0011みたいな画面IDをつけたクラスばかり。 それ以外に作るクラスといったら、データを一時的に保持するクラスと ユーティリティとDBアクセスクラスだけの場合、 クラス図、シーケンス図を作る意味ありますか。
Webアプリの場合、層分けが大切で、クラスは独立するようにするべきだから、全体のクラス図は必要ないと思われ。 そのまえに、画面IDってなんですか?ネタ?
373 :
デフォルトの名無しさん :04/10/11 14:24:23
>>372 画面IDって何か変かな。普通に使っているけど。
それは、かなり侵されてますな・・・・ 「IDをつけたクラスがある」というのは、普通に笑い話だけの世界だと思ってたんだけど。
376 :
デフォルトの名無しさん :04/10/11 15:21:58
IDをつけたクラスの話は悪い例としてよく書かれてるけど、疑問に思ってる。 画面数が数百〜千以上とかのシステムだと、番号をつけて一覧表で管理した方が分かりやすい気がする。 実際、関わったことがあるシステムではそう感じた。 「悪い例」として挙げてるときって、例がシンプル過ぎて現実的じゃないと思う。 要はケースバイケースじゃないのかな?
そのIDの名前をしたクラスを再利用するときは、どうするんですか?
1000以上あると、一覧表のメンテの方が大変そうだが。 パッケージで名前空間をわけるシステムもあるわけで、適切な名前付ける方が楽。 画面が1000以上あるということは、いくつかのサブシステムに分類することが可能なわけで。 識別子の文字数が制限されていた古代の話だね。
379 :
デフォルトの名無しさん :04/10/11 18:50:04
うーん、場所によってだいぶ常識が違うもんだな。
IDを振ったクラス名というの是とする場所の方が少ないし、時代遅れ気味だけどね。
IDで名前付けるってのは、名前付けをさぼってるだけでしょ。 「面倒くさいからXYZ0415.javaでいいや」という。
ID肯定派はいないみたいですね。 >そのIDの名前をしたクラスを再利用するときは、どうするんですか? >パッケージで名前空間をわけるシステムもあるわけで、適切な名前付ける方が楽。 たしかに。 ID付けないときって、名前聞いただけでは何の業務の何のクラスなのか、 想像付かなかったりすることが多くて、番号が振ってあった方が逆に予想が付いたりしました。 微妙に違う機能名が付いてたりすると、どっちがどっちかすぐに分からなくなったりするもんで。 名前の付け方が悪いってことかな、、、
確かにクラス名を考えるのって、無駄に悩む事もあるしめんどくさい。 スペルミスなんてしようものならもう(^^;; しかし、IDのクラス名ではソースの可読性を著しく損なうのは事実。 大規模になるほど、パッケージを最大限に活用するべきでは?
tilesで画面IDはうめこんでるが
Tilesって便利? 画面ごとにタイル定義書くのめんどくさいんだけど。
>>382 パッケージ名でだいたい判断つくんじゃないの?
>>388 きっと、パッケージ名もIDなんですよ。
jp.co.hoge.prj041.pkg03.CZX0108みたいな感じで。
IDって、覚えてるつもりでも、ちょっと仕事から離れるとすっかり忘れるんだよね。
>>389 それ最悪。。
パッと見、なんのクラスかワカランし。
そんな設計する人と一緒に仕事したくないね
>>391 そのためのID一覧表ですよ。
そのIDがなにを表すかは、JavaDocコメントで記述すれば問題なし。w
>>387 こんな感じ
<html:html>
<title><tiles:insert attribute="title" /></title>
<body>
<table>
<tiles:insert attribute="bodyA" />
<tiles:insert attribute="bodyB" />
</table>
</body>
</html:html>
>>392 その一覧表が変更されリ、更新されなかった悲惨だ・・・
>>393 それって、タイル定義はそれぞれのページに対して書かないといけなくない?
>>394 そりゃあtiles-defs.xml内の定義はページごとになりまんがな。
しかし、基本となるレイアウトを定義して継承し、違うとこだけ書けばいいのでメンテ
は楽ちん。
大体xml一発で全ての画面の構成を管理できるのはデメリットではなく大きなメリットだろうに。
必要なもの:
(1)レイアウトファイル
(2)共通部品(ヘッダ・フッタ・メニュー)
(3)各ボディ部
(4)tiles-defs.xml
ということで、ボディ部の数+(1)の数+(2)の数+1くらいでインターフェースの統一ができる。
先々のことを考えれば安いもんだね。
まぁ俺的に言わせてもらえば。 お前らXSLT使えよ。
それよりTiles Definition使えよ。
>>395 >>333 みたいなことをすると、一旦サーブレットを作ってしまえば、あとは新たに手を加えることなくJSP追加するだけだから。
それに静的HTMLでも使えるし。Strutsにも依存しない。
(4)の変わりにサーブレットを作って、あとはレイアウトパターンが増えない限りは触らなくていいし。
そう考えるとTilesのメリットってなんかなぁと。
もっと宣言的に、こういうパターンのURLはこういうテンプレ使うと定義すれば、あとは個々の定義を書く必要がないようになってれば、いいんだけど。
Tiles Definitionでgoogle検索したら一番最初に出てくる@ITのフォーラム。
jspが全部コード名になってて
>>371 が言うようなのってこんな感じかなぁと思った。
>>392 なんでわざわざメンテするものを増やすのか・・・
理解不能っす。
ID一覧表ってどうせexcelでしょ?
ウゼー
「自分は理解できない」って事を一々表明しなくて結構。
,、,、 (・e・)<「自分は理解できない」って事を一々表明しなくて結構。 ゚しJ゚ ( ´д) ヒソ (´д`) ヒソ (д` )
英語で書かれても意味がわからんから、IDでもいっしょ。
英語が苦手な香具師とは仕事したくないなぁ
日本語しか使えないのに日本語が苦手なやつと仕事するのが一番いやだぞ。
406 :
デフォルトの名無しさん :04/10/17 19:55:55
XDoclet使うより設定ファイル直書きの方が便利な事ってあります? 今、XDoclet覚えてるとこなんですが・・・ ちなみに発音は「えっくすどっくれっと」でいいのかな。
407 :
デフォルトの名無しさん :04/10/17 19:57:34
また先頭打者を出しちゃった・・・
408 :
デフォルトの名無しさん :04/10/17 19:57:56
松坂バント失敗しろ!
409 :
デフォルトの名無しさん :04/10/17 20:00:40
スリーバント失敗ナイス!
>>406 同じActionを使いまわすとき。
いばた、ナイスヒット。
StrutsでXDoclet使う解説してるページってある?
>>412 XDocletを使わない理由などだれも聞いてないだろ。
>>411 お前、少しでも検索しようと思ったことあるか
質問なんですが、 ActionFormにBeanの配列なんかを持たせて、 JSPからの入力を受ける事は出来ませんか? 例えば、、、 SampleBeanというクラスで、 String id_; String name_; のセッター/ゲッターを書く。 ActionFormで SampleBean sampleBean_; のセッター/ゲッターを書いて、 JSP側で <html:text property="sampleBean.id"> <html:text property="sampleBean.name"> は、出来る。 これを配列にしたくて、 ActionFormで SampleBean[] sampleBean_ として JSPで<logic:iterate>の中に <html:text property="sampleBean.id"> <html:text property="sampleBean.name"> を記述、、、なんてやっても出来ないんです。 ActionFormでid[] とname[]を作れば出来るんですが、 できれば情報をBeanで固めておきたくて、、、 どなたか方法ご存知ないですか?
なんか分かりづらいな(汗 要はDBのデータを一覧表示して、 それを自由に編集させたいんです。 id / nameをカラムに持つDBを表示させる時に テキストボックスにして編集可能にしておいて、 ボタンクリックでDBを一括更新、、、みたいな。 やり方が見つからなくて困ってます。
ごめんなさい、自己解決しました。
最近は、自己解決したら解決方法書かないやつ多いな。
419 :
デフォルトの名無しさん :04/10/18 05:33:05
教えてください。 class Beans { String name; BeansList list; // setter getter // } ってクラスがあった場合、jsp側では、nestedタグやbeanタグを使って、扱えますよね。 REQUESTアトリビュートするとかで。 で、nestedタグ使って表現するときは <nested:root name="id" property="dataSet(Beans)"> とかすると <nested:write property="name"> で、Beansクラスのnameの奴が出力される。 んじゃリストのlistが持ってるオブジェクトを使いたいときってどうすればいいんですか? Beans自体をリストとかにするとiterate使って表現できるんですが、ネストしてイテレータ使う方法が わかんないです。<nested:nest >を使うんだろうなぁぐらいは予測できんたですが インデックスアウトオブバウンドや、そんなリストはないとか言われてしまいます。
> jsp側では、nestedタグやbeanタグを使って、扱えますよね。 扱えるけど、いまどきは使いません。 JSTLとEL使ってください。
>>419 #foreach($row in $Beans.list)
<tr>
<td>$row.foo</td>
<td>$row.bar</td>
</tr>
#end
##それはそうと、そもそも型BeansListはjava.util.Collectionsをimplementしてるのか?
>>419 <logic:iterate id="list1" name="beans" property="list">
<logic:iterate id="list2" name="list1" property="bean">
....
でOK
ActionFormでリストを扱うのって、 getXxxList() setXxxList() getXxxList(int i) で出来ることがWebを見て分かったんですが、 これが掲載されている書籍はありませんか? それぐらい詳しい本が欲しいのですが。
424 :
デフォルトの名無しさん :04/10/20 14:42:02
html:checkboxを使っているのですが、値がfalseなのに チェックボックスがオンになってしまう現象がおこり困っています。 jspはこんなかんじです。 <html:checkbox name="form" property="hoge" /> <%=form.getHoge()%> //デバッグように表示 実行すると、 <%=form.getHoge()%>がfalseを表示しても 常にチェックボックスがonになってしまいます。 どなたか、なにかご存知の方いらっしゃったら教えてください。
Struts使っているやつでVelocityも使っているやつってどれぐらいいるの?
メールの本文生成にはVelocity使うなぁ。 JSP2.0が使える環境なら、HTML生成にVelocity使う必要はないでしょ。
>>425 プログラム全く出来ないデザイナさんだと、
JSPファイル作ってもらうよりVMファイルの方が理解されやすかったです。
ですのでStruts-Velocityバリバリ使ってます。
JSPだと<>で囲われちゃうから、いろいろと面倒が....
JSP2.0は全然触って無いんですが、PGじゃない人でも扱いラクチンです?
>>426
JSPってコンパイルに1〜2秒掛かるんで それ回避できるだけでもVelocity使う 価値がありそうなんですが。 って、Velocity使ったことないんですが レスポンスはどうなんですか?
> JSPってコンパイルに1〜2秒掛かるんで はじめの一回だけだろ。イヤならプリコンパイルという手段もあるし。
>>427 <c:if>とかなら、囲まれてても問題はないと思うんだけど。
#ifとc:ifなら同じ程度じゃないかと。
値は${xxx}だし、部品化がタグファイルで簡単にできるという魅力もある。
Velocity使ってる人で、$validator.getJavascript()がちゃんと使えてる人いる? 引数にフォーム名渡すとExceptionするんだけど・・・
とりあえず、式言語が使えるようになった以上、Velocityのメリットってあまりない気がする。
>>430 ${xxx}なんて書式が出来たんですか!知りませんでしたトンクス。
JSPに戻る気になってきましたw
>>428 ビューのDEBUG中はほぼ毎回コンパイルみたいなもんだから、プロジェクト全体でみると
その差は歴然。
てかJSPのコンパイル1〜2秒ってええ開発環境やなぁ。
うちでは数秒から十数秒ってトコ。だからJSPのロスタイムもバカにならん。
Velocityの場合は、まぁ「瞬時」に出る感じだな。
> って、Velocity使ったことないんですが
> レスポンスはどうなんですか?
ロッドジョンソンの本によると、平均してVelocityはJSPの二倍程度。
しかし、体感速度は圧倒的にVelocityが速い。
なんかトートロジーっぽいが。
VelocityとJSPの違いを体感できるっていうのは、それはそれですごいと思う。 JMeterとかで計った違いしかわからん。
>>435 開発環境がしょぼければしょぼいほど差が顕著に判るよ。w
いやまったく。
ActionやJSPをちょっといじるたびにローカルのコンテナにdeployして確認してるのですが、 この作業にやたら時間がかかって、そのたびに2〜3分はタイムロスしてしまいます。 # そのうえLombozがアホみたいにメモリ食うらしくて頻繁にOutOfMemoryでeclipse応答無しになるし。 明らかにこの開発方法は間違ってると思うのですが、みなさんはどうしてるのですか? この無駄な時間を何とかすれば数倍速く開発できるような気がするのです・・・。
>>430 タグじゃないから、普通のHTMLエディタが使える。
>>437 EJB使わないのならLombozを捨てるのもあり。Sysdeoのプラグイン使ったら?
詳細はEclipseスレでどうぞ。
もしくは、StrutsTestCaseをMockObjectアプローチで実行するとか?
これなら単体テストレベルではコンテナ不要だし。さすがにJSPはそうもいかないが。
>>433 悦ぶのはまだ早い!
${xxx}ってのは、
<c:out value="${xxForm.property}"/>
っていうタグの属性部分のこと。
$xxForm.property
と直書きすれば足るVelocityとは、コードのスッキリ感、htmlとの互換性がまるで違う。
JSTLの<c:>タグ全般的にどうもVelocityの劣化コピーって感じだな。
<vel:>タグのほうがVelociMacros使えるだけましちゃうんかと。
うちではstrutsタグオンリー→JSTL+strutsタグと変遷した後、Velocityに一本化された。
新人教育時間も短くて済むし、生産性もかなり上がってるよ。
Mailテンプレートやら、Hibernate使うほどでもない案件のSQL生成エンジンやら、もう
なにから何までVelocityで事足りてる。
StrutsTestCaseで、 web.xmlに書いたinit-paramを取得する方法ってないですか? Strutsでは普通に取れるのに、 StrutsTestCaseだと取れなくて・・・。
>>441 ん?ちゃんと${xxx}とどこにでも書けるけど。
ELに対応していないタグの属性にも書ける。JSP2.0って書いてるでしょ。
ま、Velocityを使う体制が整ってるなら、それでいいと思う。
関係ないけど、Hibernate使うほどでもない、というより、最近は逆に、わざわざ手書きでSQL書くほどでもない、という方がしっくりくるんだけど。
どうでもいいプロジェクトはHibernateでSQLレス。
パフォーマンスとか複雑な問い合わせが必要そうだったら、なにか考える、って感じで。
>>442 setInitParameter()で解決します。
Mock版だとweb.xmlの中は見てくれない様子。web.xmlまでは面倒見切れない、ということなんでしょう。
>>441 VelociMacrosって言っても、タグファイルで同じようなことできるんじゃねぇの?
>>441 これから開発でVelo導入するつもりなんだけど、バグとか問題はない?
Struts1.1 + Veloは1.4、VeloToolsは1.1使いますが。
新規ならStrutsは1.2の方がいいよ。 APIがところどころ整理整頓されてるし、 気づいた限りではValidatorのコードに若干修正が必要だったから。
>>446 ということでVeloのメリットは「制御構造がタグではない」「パフォーマンスがちょっといい」ということだけしかないけど、大丈夫?
デメリットは、環境のサポートがないこと、対応が遅れること、タグライブラリが使えないこと、標準ではないこと、などあるけど。
>>448 Velocity使ったことはなさそうだけど?
「制御構造がタグでない」
「パフォーマンスが倍」
ってメリットは「だけ」でまとめてよいものか。
制御構造がタグでないメリットは、さらに
「htmlで造ったページをJSPに「変換」する手間が不要
「htmlエディタで編集可能」
「ブラウザでプリビュー可能」
等に分けられるわけだし。これがあるからこそデザイナにもVelocityは触らせられる。
プログラマが画面作るような簡単なアプリなら話は別だけど。
「環境のサポートがない」よくわからん。
「対応が遅れる」Struts1.2でやってるが不具合は無いが。具体的に何か遅れたことでも?
「タグライブラリがつかえない」必要としないが正しい。部品化・共通化はマクロの外だしで可能。
「標準でない」Java/SunのStandard First戦略の崩壊が叫ばれている現状をなんと見る?
SpringやHibernateの隆盛を見ても分かるように。
View面ではVelocityこそがBetterでLighterでFasterなJavaの一角を担うものである。
とりあえず、JSFが普及するまではStrurts+Velocityでいいんじゃない? Tapestryよりはましな気がする。開発者とデザイナの分業に着目すればだけど。
Easy Strytsつかっとると、CVSにコミットできないときあるのは 僕だけですか、そうですか。
まぁ、 > 制御構造がタグではない はある意味何事にも代えられないメリットだわな
今からならVelocityよりもNirvanaじゃない?
>>447 あ〜やっぱValidator、1.2と1.1だとフォーマット違うみたいね。
struts.jarだけ1.2に入れ得たらValidationチェックしなかった・・・
あと1.2で1ヶ月前にリリースされたばかりだから安定面で
ちょっとこわいかなぁと思い1.1に戻した。
1.1は結構実績あるしね。
>>449 正直、JSPは嫌。なんで先にVeloみたいなの考えられないのか・・・
JSFが普及・・・・するのか?実際
>>455 本格普及はリッチクライアントが主流になってから、と見てるんだが。
>>451 コミットできない時はあったかもしれないけど、忘れた。
もうあのクソなプラグインは使っていない。
2年ぶりにServlet製造するんだけど、そのプロジェクトでStruts使うというんで、
4千円自腹で
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756143075/250-0022558-6511468 買って読破してみたんだが、読んだことある人、煽らないで教えてくれ。
めずらしく大枚はたいて買ったのに、消化不良で悔しいw
この本のサンプルアプリは、画面間で2つのActionを挟むんだが、なんで1つで
済ませないのかが分かりません。画面1つに1つのActionにするより、ワンクッション
置いて画面分岐する方が再利用しやすいのか?
もひとつ、DynaActionFormって使える?ActionFormをサブクラス化して再利用できないし、
XMLに外だしすんのも、Bean作るのも手間は変わらんと重いまふ。つーかBeanなんて
AntでもEclipseでも作れるし、ファイルにまとめたらかえってファイル競合起こすんでねーの?
オプソのメリットも十分わかる気がするが、そんなに騒がれるほどのフレームワークとも
思えんのだが。。漏れの自作のへたれディスパッチャservletと大して変わらん希ガス
>画面1つに1つのActionにするより、ワンクッション >置いて画面分岐する方が再利用しやすいのか? 画面表示前処理と送信を受ける処理に分けた方が作りやすいとは思う。慣れの問題もあるが。 > もひとつ、DynaActionFormって使える? 使えない。「ファイル競合」はいまいち意味不明だが、ほぼあなたの言うとおり。 >漏れの自作のへたれディスパッチャservletと大して変わらん希ガス 技術的な完成度はともかくとして、書籍やWebによる豊富な情報量、 すでにスキルを持っている技術者の確保の容易さなどを考慮すると 既に普及しているフレームワークを採用するメリットはあると思う。 未来永劫自分一人でメンテするのならいいんだけど。
462さんありがとう。もやもやが少しとれますた。 >画面表示前処理と送信を受ける処理に分けた方が作りやすいとは思う。慣れの問題もあるが。 BeanをViewHelperとして使いまわすには、1次受け手のActionFormにいろいろ仕込んどいた方が いいと思うけど、複数画面から呼ばれる画面など、事前処理を共通化したいときには分けといた方が いいかもしれませんね。 でも、1次受け手のActionFormと事前処理のActionFormの引継ぎは手動でやらなければ いけのいのかな?←分からないまましゃべってたらつっこんでください。 ファイル競合とは・・・・新人君のCVSのコンフリクトを思い浮かべると、鬱。 そして先輩面をして、コンフリクトを解決しようとしてアボーン。トラウマになってます。。 CVSを使っても使わなくても、ソースにメタタグを埋め込んで、という最近の時流は、統制管理と 相反するけど、製造フェーズでは正解ですね。メンテフェーズで切り替えればいいし。 >技術的な完成度はともかくとして、書籍やWebによる豊富な情報量、 >すでにスキルを持っている技術者の確保の容易さなどを考慮すると >既に普及しているフレームワークを採用するメリットはあると思う。 >未来永劫自分一人でメンテするのならいいんだけど。 まったくそのとおりですね。基本的な部分のフレームワークの教育コストが、 自前フレームワーク使用による製造コストの削減分を超えたりしていることにみんな 気づきはじめたみたい。APIといたちごっことか、あたりまえだし。 それではまた後日質問させていただきます。実際にサンプルソースも動かして。 貴重な意見ありがとうございました。
前画面と後画面が作成者が違う場合なんかを想定してるんじゃないかな
Velocity使ってもJSP使ってもスッキリ度は変わらないと思われ。 むしろ、JSPだとタグの形で統一されているので、スッキリ度は高い。 ただし、古いHTMLエディタだとJSTLタグを認識してくれないのでデザイナに嫌がられることがある。
467 :
デフォルトの名無しさん :04/10/27 19:29:44
Strutsのみだと死ねるね。 JSTL+Struts-ELを使わないとだめ
Tomcat5ならふつうのStrutsタグでおけ。
Strutsインアクション一冊あればOK
厚さのわりに薄い本ね。
内容も古いしね。
Velocity >>(超えられない壁)>>>JSTL+Struts-EL>>>>>>>>>>StrutsTagオンリー
ふつうにJSP2.0+JSTL+Strutsでええやん。
struts-elって <bean-el:write> とかないんだけど、どうするの? あれは <c:out> とかのJSTL前提で作られてるの?
StrutsTagオンリーだよ・・・。 俺に選択権はないのさ・・・。
独自の糞タグを泣く泣く使ってる俺らに比べればマシです。 ドキュメントも無いのに「ライブラリ」を名乗るな。
477 :
∫∈ :04/10/28 04:45:23
Java World 12月号の黒住さんの記事は必読だ。 クリーンなView層をVelocityでつくろう。
みんなが使っているという理由でStrutsを使っているので、みんなが使っているという理由でJSPを使います。
Velocityでカスタムタグみたいなのは作れるの?
velocimacroかな? 入れ子の制御ってできるんだろうか?
Struts+JSP1.2で2本ほど作ったが、あまりの汚さに辟易。 せめてロジックをcoreタグで作るとか、タグ内タグはelに置き換えるとかしたくなる。
それに比べると、JSP2.0は幸せ度高いね。 カスタムタグも、あんなアホみたいな手順踏まずにファイル一個置くだけで作れるようになったし。
Tomcat 5.x + JSP2.0 + Struts 1.2.x で無問題?
Velocityのがいい。
>>484 制御構造がタグでいいなら無問題。
あ、JSTLも必要だぞよ。
>>483 そんなことVelocityなら大昔からできてるやん。
>>487 カスタムタグほどの自由度はないとおもうんだけど。
それと、「いつから出来てた」ということ自体には微塵の価値もない。
それなりの再利用可能な部品がたくさんできてるなら別だけどね。
>>487 俺様フレームワーク厨みたいな言い方だな。
「Strutsなんて糞。もっと使いやすいフレームワークを大昔から自作してるよ」みたいな。
>>488 >自由度
まぁそうだな。
汎用「テキスト」テンプレートなんだから、Velocimacro単体でできるのは
View上のロジックの部品化・再利用ということになる。
他の層にからむような処理をはさむ場合はToolsクラスを作ることになるが、
それでもJSP1.2時代のカスタムタグを作るのに比べりゃ手数は少ないね。
まぁ「大昔から」という言い方は厨っぽかったかもしれん。
いいたかったのはVelocityでも部品化は楽チンなんだよと。
ファイル一個置くだけなのはJSP2.0だけじゃないんだよということをだな。
マイクロソフトがWindows95でプリエンプティブマルチタスクを大々的に世界初のように
歌い上げたときに、ちょっとまてと。OS/2は随分と前からやってるんですがと
いいたかった、WARPユーザーのような・・・いや少し違うか。
まあ
>>489 は空気の読めない無知厨だが。
>>491 Velocityの日本語サイトみたいに、JSP1.2withoutJSTLと比較してVelocityマンセーという情報が多いのが問題なんだよねぇ。
「それってTomcat5じゃなきゃ使えないでしょ」とかなら説得力あっていいんだけど。
JSP、つぎはタグじゃない形もしくはHTMLへの属性追加でJSTLやカスタムタグを使えるようになってくれんかな。
493 :
デフォルトの名無しさん :04/10/31 14:17:33
/BeginAction に対応するマッピングが見つかりません って意味がわからないし・・・
JSTL,ELがあればVelocityいらね 利点もなし。
Struts + Tiles + Velocity + S2 (+StrutsTestCase)の連携簡単にできますか?
>>496 Struts+StrutsTestCase+Tiles+Velocity+Spring+Hibernateの案件なら
最近多いよ。
フツーにカンタンに連携してます。
S2はうちはいまんとこないなぁ。
501 :
デフォルトの名無しさん :04/11/01 14:24:14
Action内で入力のエラーをみつけたときにinputに戻るためには、どうするのがいいですか?
>>501 return mapping.getInputForward();
ActionFormにDate型のフィールドを設けて JSPから日付型の文字列 (yyyy/mm/dd) を受け取りたいんですが、、、。 intやlongのフィールドには、適宜キャストされて値がちゃんと入りますよね。 同様に日付もparseしてから値を代入してくれるようにしたいんですが、 Action/ActionFormでいちいち変換の実装を行わず RequestProcessorなどで変換を行うことって出来ますか?
>>498 それ、本家サイトの日本語訳。
ネタが古いなあとは思った。
>>505 日本語サイトって、本家の日本語訳のことを言うと思うんだけど。
>>504 入力エラーのことを考えると、ActionFormにはString型を使う方がいい。
PHPが(・∀・)イイ!!
Strutsを使うことに比べると、PHPは使い物にならん。
PHP? あぁpukiwikiの、カスタマイズ言語ね
>>496 超簡単だよ。S2Strutsを使えば問題なし。
Struts+tiles+velocity+S2Struts+S2Dao+S2testCaseで開発している。
楽すぎる(w
FORMを含んだり複雑な色分けしたりする大規模なHTMLテーブルを Strutsで作るには、JavaScriptとの絡ませ方とか大変になりそう・・・
>>513 そういうのは、何で作っても苦労するもの。
>>513 そこでVelocity使ってデザイナと分業ですよ
>>515 カスタムタグ使えた方が、楽な気がする。
色分けにCSS使えないの?
Nirvanaが一般的なタグで使えるようになればいいのになぁ
Strutsより例えばTapestryの方が遙かにいいと思うのだが、趣味でやってるわけじゃないので結局Struts使ってる罠。
Tapeは、みんなみんなが熟練者じゃないとだめだという噂。 そうなの?
のだった。
つまり、天才の俺様がひとりで使うにはTapestry遥かにいいが、わけのわからぬ下賎のものと一緒に開発するには向いてないということだな。
Velocityだと既存のJSPカスタムタグ使えないですよね? そんなの捨てろと言われても使わざるを得ないのが仕事だったり。
>>437 俺んところもそう。プロジェクトのポリシーでそうなっているが面倒でしょうがない。
いちいちdeployせずに、オンザフライでコンパイルして動作確認したい。
プロジェクトのディレクトリ構成とか、参考になるようなサンプルプロジェクトないかな?
.properties をnative2ascii 通さなくても使えるようにして欲しいよ。
やっぱeclipse + Tomcat-plugin + Tomcat + Strtusだな!
やっぱNetBeans+Strutsだな。 プロパティファイルも、勝手にnative2asciiされているし
StrutsStudio買ったけど、 結局いまはTomcat-Pluginしか使ってないよ。。。
>>528 StrutsStudioを使わなくなった理由きぼん
>>525 Eclipse使ってるならプロパティエディタプラグイン使うべし。
>>530 Eclipseが重いクソ環境とか、X使えないUNIX環境とかあるのです。
XDocletのタスクのついでに<native2ascii>って書くだけだから、問題なし。
JSP2.0をサポートしているコンテナってtomcatぐらいか?
WebSphereとかResinとか
ActionFormで受け取った情報ってどうやってsessionに保存してますか? サンプルによってはActionFormオブジェクトごと保存してるのと、 格納用のオブジェクトを生成し、それにデータをうつして、 そのオブジェクトをsessionに保存している場合がある。 後者の方がなんとなく、メモリ効率とか良さそうなんだけど、 Formのメンバが増えたとき格納用のクラスのメンバーも対応して増やさなければ いけいないのでデータ移し忘れのミスが起きやすそう・・・
>>536 ActionFormは、あくまでも入出力でやりとりするデータのためのモデルだと考えて、セッションに保存するようなロジックのためのモデルとして考えたほうがいい。
そういう考えをベースに、たまたま同じモデルだったり、変換効率や作業効率が気になるときにActionFormをそのまま格納する。
> データ移し忘れのミスが起きやすそう・・・
こういう問題が気になるときには、モデリングの時点で問題がある場合が多い。
× セッションに保存するようなロジックのためのモデルとして考えたほうがいい ○ セッションに保存するようなロジックのためのモデルとは別のものとして考えたほうがいい
>>537 >こういう問題が気になるときには、モデリングの時点で問題がある場合が多い。
今作ってるのは、入力画面が3画面遷移して最後に登録を押すとDBに
保存されるような内容です。
なので各画面に対応したActionFormのメンバは登録時に全て必要なわけです。
そういう場合は、やはりActionFormをセッションに保持した方が良いですか?
あと、2画面目、3画面目には戻るボタンがあって、戻ると前入力されていた
内容が入っていて欲しいんですが、ここでもハマってます。
各画面の次へボタンを押したときに呼ばれるActionのscopeをsessionにしておけば、
簡単に実現できるのですが、これもメモリやセキュリティ的にあまりよろしくないかなと。
3画面共通でひとつのActionFormにする。
xdoclet使ってるとそういう発想が消えがちだ・・・orz というか素直に感動しました。 これで今日中に終われそうだ。
DBにそのまま保存する場合は、DB側で扱うモデルを中心に考える。 ORマッピングとかバインディングの仕組み使ってればDBからマッピングするためのモデルができるからBeanUtils.copyPropertiesして、そっちを扱う。 最終的に保存するときはsaveとかやるだけ。 そうじゃなくて、仕組み使わずDB用のモデル作らず、わざわざ自分でSQL書いてるのであれば、最後までActionFormのままもちまわってもいいとは思う。 ActionFormに関してはメモリのことは気にしてもしかたがない。 3画面にまたがるならValidationのことを考えると、登録用のモデルを作って、ActionFormはそれぞれの入力画面ごとにつくってcopyPropertiesした方がいいと思う。
>>541 > xdoclet使ってると
関係が・・・・
>>542 そうですね、validationがあるから1ActionFormは無理っぽいです。
しかし、Formを分けると前の画面に戻ったときに、
前入力した内容を入れておくというやり方がわからないです。
テンプレートにVelocity使ってるんですが、
<input type="text" name="lastName" value="$!inputForm.lastName">
こうしておくとvalidationにひっかかって再びこのページが表示されたときは
入力した内容が入るんですが、他のページから戻ってきたときは
inputFormは消えているので、空になってしまいます。
sessionのattributeに保存した内容を参照するのでしょうか?
そうすると、今度はvalidationでひっかかって、
再表示されたときに、今入力したのと違うものが表示されてしまう気がします。
>>543 xdocletは確かに関係ない。単にstruts-config.xmlの理解不足。スマソ。
>>544 >
>>542 > そうですね、validationがあるから1ActionFormは無理っぽいです。
こういう場合にValidatorActionFormが有意。
でもActionFormを使いまわす場合、
例えば3画面のときに1画面目の項目もsubmitできてしまうので、
そういうのを防ぐかValidationが必要になる。
だから見通しを考えるとValidationも共通の方がいいと思う。
(もちろん要求を満たせるならだけど)
自分は、使用されるテンプレートとActionFormは一対一になってる方が わかりやすいかなと思ってます。 なので、やっぱりActionFormを別個作る事にします。
で、前のページに戻ったときに、前入力していた内容が入る、 かつvalidationに引っかかって同じページが再表示されたとき、 入力した内容が入る方法を考えました。 -ActionFormのvalidation()メソッドで、 まずtmpinputオブジェクトに入力内容をコピーしてsessionのattributeに設定。 その後、validationチェックを行う。 -テンプレートではtmpinputを参照。 <input type="text" name="lastName" value="$tmpinput.lastName"> こうしておけば、テンプレートでtmpinputを参照したとき 今表示したい内容を参照できるようになると思います。 tempinputは登録完了時に削除します。 ただ、validation()にvalidationチェック以外のロジックを入れるのは 美しくないですが・・・
548 :
デフォルトの名無しさん :04/11/23 22:29:38
EasyStrutsって使えますか? Webアプリ作るときって、htmlの紙芝居を作ってから、 JSPおよびStrutsタグに変えていく方法をとりますか? もしそうだとすると、htmlをStrutsタグに置換する ツールとかありますか。
> EasyStrutsって使えますか? 使えない > Webアプリ作るときって、htmlの紙芝居を作ってから、 > JSPおよびStrutsタグに変えていく方法をとりますか? そういうことも多い > もしそうだとすると、htmlをStrutsタグに置換する > ツールとかありますか。 JBuilderの上位エディションにはそんな機能もあったっけ・・・
>>547 結論としては、Struts Workflow Extensionを使えってことだな。
ActionFormにPOJOを使用できるみたいですが、やってる人います?
いつから?どうやって?
>>552 バージョンは1.2.2ぐらいからじゃなかったかな?
BeanUtils 1.7が必要みたい。
一応、動いたけどvalidationとかどうするのか...
下の通り
・struts-config.xmlの定義
<form-bean name="sampleForm" type="xxx..PojoBean"/>
・Actionクラス(以下の記述で取得)
PojoBean bean = (PojoBean) ((WrapDynaBean) ((BeanValidatorForm) form).getInstance()).getInstance();
ここまで書くなら、ふつうにActionForm作ってBeanUtilsのcopyPropertiesのままでいいね・・・
>>554 ・決まりきった長い1行のコードを記述する
・クラスを1個増やしてコピーするコードを記述する
こうちどちらを取るかって事だね。
BeanUtilsのcopyProperties使うよりも ActionFormにBeanのアクセサ入れる方が綺麗だと考えるこの頃。
ActionForm作成を無駄と考えるよりも、必要なPOJOの方をインターフェイス定義してやった方がいい気がする ActionFormにimplementsしてやればStrutsとの依存性を切って利用できるんだし
>>557 setterとgetterしかメソッドが無くてもインターフェースを使うのですか?
>>556 だから初めからPOJO使ったほうが綺麗じゃない?
結局、入力モデルのActionFormとエンティティモデルのPOJOには差があるので、copyPropertiesを使う必要がある罠。 ActionFormのプロパティの型は、すべてStringにするのが都合がいいし。 そこを分けないアーキテクチャでやってるならいいんだけど。
全てString ... orz
>>560 だから、何故
>>553 のやり方ではなく
copyPropertiesでないといけないのか教えて欲しいんですけど。
>>561 そうしないと、入力チェックではじかれたものが消えてしまう
たとえば、数値入力項目をintにすると、入力間違いで「123a」と入力したときに、再入力時には「0」となってしまう。
チェックはValidatorでできるし。型変換はcopyPropeties任せで。
そう考えると、ActionFormのプロパティにString以外の型を使うメリットってあまりない。
もちろんエンティティモデルのBeanには型をつけるけど。
>>562 copyPropertiesでないといけないとは書いてないでしょ。
入力モデルとエンティティモデルをわけないアーキテクチャでやってるなら問題ないよ。
> そこを分けないアーキテクチャでやってるならいいんだけど。
元々、リクエストパラメータはStringで取り出すからね。 他の型の場合は無理矢理(?)StringからInteger等に変換していることを 考えると、ActionFormの段階ではすべてStringで扱い、Model層で適切な 型に変換するのもありではないかとおもう。
BeanUtilsがなければ、変換がめんどうだから適切な型で、ってなるけど。 もうcopyPropertiesまかせでいいじゃん。
>>563 それはcommons validatorつかえば問題ないよ
>>569 文が長いし、いろいろなものが出てるし。
普通にValidator使っても、型変換チェックではじかれたものが消えてしまう問題は解決できないし。
>>553 どうせならActionもPOJOにしたいな。
S2JSFみたく、Stringを返すActionにできればBEST!
ActionのほうはRequestProcessorいじれば簡単そうだね。
>>553 のやりかたでActionFormをPOJOにすると入力チェックはうまくいくのかな?
>>560 ん?
>>入力モデルのActionFormとエンティティモデルのPOJOには差があるので
入力モデルのPOJOつくるって話してたんじゃないの?
lomboz でJSP書いているけど、カーソルと実際の編集行が追従しなくなる。 こんなヘンテコなのじゃなくてスレ住人のお勧めJSPエディタ教えてくらはい。
struts-config.xmlを読み込んで画面遷移を視覚化したHTMLを吐いてくれるような ツールないかな。doxgenみたいな感じで。
strutsdocはちょっと違うな
Struts-ELってのがあるみたいですが JSTLではだめなんでしょうか。
商用コンテナって JSP2.0 サポートしてないのあるね。 EJBの規格とかはいち早く対応するのに変なの。
>>577 > EJBの規格とかはいち早く対応するのに
そうでもない。
>>573 結局 solareclipse とか xmlbuddy とか使ってる・・
>>580 JBossIDE1.4も色分け表示とかしてくれるよ
まともなJSPエディタはお金出して買えってことかな・・ ところでStrutsのメッセージリソースだが、 たとえばセレクトボックスの中身を出力するときなど配列でほしいときは なにかお勧めのやり方あります? 一つ一つJPSに書くのもあほくさいし、毎回クラスを作るのも更新が面倒。
LavelBean だったかな
NetBeansのJSPエディタで満足している。
>>583 org.apache.struts.util.LabelValueBeanじゃないのか?
588 :
デフォルトの名無しさん :04/12/10 00:27:14
システムコンサルティングを某sierで行っているセキュリティアドミニストレータです。<br> Strutsで大変困ってます!すぐに教えて下さい!!<br> これが実現できないと、このプロジェクトの拡張性が犠牲になってしまいます!<br> 大変なんです!<br> strutsで画面を遷移を制御する場合、ActionServletへリクエストを投げることは<br> よく知られたノウハウの一つですが、今回のプロジェクトリーダが<br> 私の作った汎用的な日付生成クラスに、<br> 勝手に”昭和5年”と書いてしまったんです!<br> javac怒りまくりです!!しばらく機嫌直りません!!<br> あれほど私がすっぱく、甘い匂いがするまで待てと<br> 念押したにも関わらず、このような事態に陥ってしまいました。<br> 本当に油断も隙もない、荒れた世の中です。
589 :
<br> :04/12/10 00:28:32
すげぇ
Struts-ELはstrutsのタグにELが使えるだけのやつ JSP2.0以降は必要ない JSTLはタグ内にELが使えるタグライブラリ。logicタグよりはるかに使える XSLTに構文も似てるし覚えやすい
>>590 JSTLやELってどんな時に使えばいいのか想像できない。Actionのなかでやらばいいじゃん。
>>592 プレゼンテーションロジックを書くとき。
ActionはControllerだから処理はさせない方がいい。
ビジネスロジックはModel、プレゼンテーションロジックはView
>>590 は何らおかしくない
ELがあれば、BeanかMapかListさえViewに渡せばいいんでJSP書くのが凄く楽になった
アカウント登録のページ作ってるんだけど、 ユーザーが任意のIDを入力できて、同じIDがDBに登録されてたら 入力ページで、「すでにそのIDは使われてます」って出したい。 このIDがDBに登録されているかどうかのチェックって、 Formのvalidate()で行うべきか、Actionのexecute()で行うべきかで迷う。
>>593 ていうか
>Actionのなかでやらばいいじゃん。
この書き方だとアクションクラスにメイン処理書いてる
たぶん
>>595 FormでDBアクセスなんてしたくねーな
validateは入力の整合性をチェックするためにあるので、トランザクションにかかわるような処理は行うべきじゃない。
>>595 それはView/Controller層の入力値検査処理ではなく、業務ロジックなので
Model層で行うべき。
なるほど。 では、誕生日が年、月、日で入力フィールドが別れている時はどうでしょう? 年、月、日単体でのチェックだけでなく、実際に存在する年月日であることと うるう年のチェックなんかをしなければなりませんが、 それはどちらで行いますか?
>>600 「入力の整合性」
業務ロジックには関係ないだろ。
>>599 たぶん、「〜さえ渡せば」じゃなくて「〜を渡しさえすれば」ということを言いたかったのだと思われ。
ELがなければ、「〜」を渡したときにそれぞれの処理をするコードを書かないといけない。
Listならイテレータ使って、MapならgetしてBeanならゲッター呼び出して
>>602 Listはまぁイテレータ必要だと思うけど、
少なくともBeanならゲッター呼ばずに、ドットで繋げば良いだけだろ?
<html:text property="bean.userName"/> で。
Mapにしても、マップバックドを踏まえてるように思えん。
データモデルクラスはデータを保持するためのもの。 ActionFormBeanは表示用データを格納するためのもの。 理屈は分かるんだが、イマイチ実際に開発始めると上手く行かない。 エラーチェックをするときは、データモデルクラスの方がいいんだが (「1,000」という文字列データより、1000というint型データの方がいい、とか) でもエラーチェックはマスタデータなんかを参照することもあるから、 EJBのビジネスデリゲータ以下のレイヤでやりたい。 でもエラーチェックには明細データのページ番号なんかも必要 (エラーが発生したときに、エラー発生ページに飛ばしたい) だが、データモデルクラスにはページ番号のような画面表示制御用の情報を持ちたくない。 ちょっとしたジレンマを感じる。 同じ理屈で、画面上一行飛ばしで入れたデータをデータモデルクラスに変換するとき。 空の明細データを残すのがいいのか、残さないのがいいのか、すごく迷う。 空行を詰めてしまっていいのなら問題ないが、空行も入れたまま、もう一度画面を表示したい場合、 空データをデータモデルクラスに入れないといけないな・・・、とは思うが、 空行があるかどうかは表示の問題で、データクラスには空行を入れることに必然性はまったくない。 迷う。
読解力が必要となるレスですね。 Validationをもっと信頼シロ。必要なら作れ。 表示の問題は、表示側で解決シロ。
>>604 ちょっとしたつっこみ。
org.apache.struts.action.ActionFormBean は Struts設定ファイルの
<form-bean>要素に設定された設定値を保持しているコンポーネント。
ActionForm(のサブクラス) の間違いでしょ?
>>604 > ActionFormBeanは表示用データを格納するためのもの。
は?
>>605 マスタのデータ存在チェックとかもvalidatorでやるの?
名細部に社員コードを入れた。
submit。
送信されたデータがマスタに存在しない。
画面上、マスタのチェックに引っかかった明細のページを開いて、その入力欄にマークを付けたい(*)。
という場合も、validatorでやってる?
>>606 うーん。
うん。
>>608 少し上のレスも読めないんだな
おまえには一生理解できないかもな
>>609 読んで自分も引っかかった覚えがあったので蒸し返したんだが・・・。
って、俺、何、言ってるか分からない?
>>610 蒸し返したというより、理解できなかったから繰り返しただけにしかみえない。
>>610 >という場合も、validatorでやってる?
やらない、と書いてあるしな。
>>600 年月日をくっつけた値を返すgetterメソッドを作って、それをValidatorに
dateチェックさせればOK。エラーになっても元の年月日のフィールドに
値は残っている
>>603 Beanを単純に表示するだけならStrutsのタグでも十分だけど
属性に値をセットして色々したいときには<%= %>で書かなきゃいけなくなるから面倒
EL使えばView表示に関するロジックは全く書く必要が無く、データを渡してやるだけで済む
JDK5.0のようにラッパーオブジェクトをプリミティヴ型のように使えるし
>>613 EL使ってループや分岐の一つ書くだけでも充分ロジックだと思います
615 :
デフォルトの名無しさん :04/12/21 07:48:18
>>604 >でもエラーチェックはマスタデータなんかを参照することもあるから、
>EJBのビジネスデリゲータ以下のレイヤでやりたい。
>>605 >Validationをもっと信頼シロ。必要なら作れ。
>表示の問題は、表示側で解決シロ。
>>608 >
>>605 >マスタのデータ存在チェックとかもvalidatorでやるの?
ということかと。
>>612
しかし、マスタの存在チェックとかも、起動のタイミングはvalidatorになるね。
データ更新フォームでのデータの取得って、どこでやる? 更新ページのAction?ActionFormのreset?
>>618 おれはDynaActionForm派なのでActionでやっている。
>>618 何度も出てるけどデータベースに接続したいならModelでやれ。
>>619 何度も出てるけどDynaのメリットなんかもはや無い。乗り換えろ。
>>620 で?
そのModelの呼び出しはActionとActionFormのresetとどこでやるの?
というか、Modelってなにを表すの?
Struts使う前にやるべき事があるようだな。
また、MVCとか、古臭いことを持ち出してきたね。 で、StrutsでMVCっていうなら、M(ActionForm)、V(JSP)、C(Action)だから、ActionFormでやれ、ってことかな?
620は、ActionFormにデータベース処理を記述する人なんだろうか。
>>624 ActionFormはModelか?
本当にそう思っているの?
StrutsはControllerしか賄わないフレームワークですよ
>>626 そう思ってないけど、Strutsの文脈でなんの説明もなくMVCといったときには、その割り当てが一般的だ。
それと、Strutsから先の部分ではMVCである必要もなく、むしろVO+DAOの方が最近の流行みたいだから、Struts自体がMVCのどれにあたるかという話自体が前提条件を欠いている。
それから、ここでの質問は、ActionとActionFormのresetのどちらに処理の起点を置いたらいいのかという話なので、アプリケーション全体のMVCの話をされてもどうしようもないです。
ActionForm内でDBにアクセスするなと書いているのに解決しないのですか?
ActionForm内で、というのが、ActionForm起点の処理で書くなという話なのか、処理自体の記述を別のところに書けという話なのか、わかりづらいもので。 それと、resetメソッドの役割を考えると、Strutsの仕組み的にはresetメソッドで書くのがスッキリするのではないかと。 フォーム初期化のためだけのActionができてしまうことになるし。
Modelでやれ、とか、どうとでも取れるのもあったり。
>フォーム初期化のためだけのActionができてしまうことになるし。 別にかまわない。
Strutsの仕組み的には、Actionでビジネスロジックを呼び出す方がすっきりしています。
>>633 ActionFormに処理を記述して関わるActionを減らすより、ActionFormをシンプルにして関わるActionを増やす、ってことですね?
ていうか、jspに遷移したければかならずActionを経由させるようにする。 その修正用画面に遷移するときも当然Actionを通る。 何ら問題はない。
選択項目の準備とか、多対多関連があって項目数が増減するフォームの準備は?
Action通そうが通すまいが変わらない問題だろうがそれは
>>638 ということは、Action以外の場所で準備するの?
×場所 ○タイミング
入力エラー時を考えると、この場合は、ActionFormのreset以外に書くタイミングがなさそうだ。 そうすると、ActionFormではDB処理をやらない、っていうのはresetに関しては適用できないってことかな。
>>642 そう言うなら、多対多関連があって項目数がDB上のデータによって変わるフォームの項目の設定を、どこでやればいいか教えてください。
>>643 Model(ビジネスロジック)
あーあー日本語の通じないアホの相手は大変だな
>>643 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
// ここでBL呼び出して処理すりゃいいだけだろ
// あとお前はStrutsの前に山ほど勉強すべき事があるようだ
// 話が全然噛み合わねえんだよ
return mapping.findForward(FORWARD_failure);
}
珍しくこのスレでも答えが返ってくるくらいレベルの低いのが来たなw
Strutsってのは、馬鹿でも作れるフレームワークじゃなくて わかっている人が楽をしたり、チームで開発手法を統一したりするための フレームワークなのに、そのことをわかってない馬鹿が多すぎ。 流行っているから手を出そうとするか、フレームワークって言葉に飛びついてるのか知らんけど もっと基礎を勉強して欲しいと思う。
Modelがビジネスロジックだと言ってしまうのは、どうかと思うが。
>>645 呼び出し順としては、
ActionForm#reset
↓
ActionFormへ入力値のパック
↓
Action#execute
なので、executeでActionForm中のArrayListの項目を用意しても、手遅れなんですよ。
ActionForm#resetでDBから項目を読み込んでArrayListを準備
↓
ActionFormへ対応する入力値のパック
Strutsの話でModelといえばActionFormだし、Strutsの外ではMVCである必要がないから、Modelと単に言われても前提条件を欠いてると。 Modelをビジネスロジックとか言ってるし、MVC妄想をひきずってるとしか思えん。
>>645 で充分OKなんじゃないかと思うのだが。
まあ
>>649 が情報出してくれないんでこれ以上答えようがないな。
>>650 >Strutsの話でModelといえばActionFormだし、Strutsの外ではMVCである必要がないから
意味がワカンネ。
たとえば(最近は使う人がいなくなったけど)DynaFormを使うとしたらどうしろってんだ?
つまりStrutsはもともと645のような、そういう使い方を想定して作られているということ。
まあ、それをどう使い倒そうがそれは当然使う方の自由だけど、
大抵のことはこのやり方で十分可能。
>>649 漠然と「多対多関連があって項目数がDB上のデータによって変わるフォームの項目の設定」と
言われても実際どういうのを指しているのかがよく和下欄のだけど、
ListとかMapあたり使えば大抵のデータはどうにでもなるはずだ。
あとたぶん設計が糞。
ていうか、「ActionForm#resetじゃないと実現できません!」って言い張るなら
なぜこんなとこで質問したのかが和下欄
人の意見なんか聞くつもりないなら最初からそうやっとけよ。
>>649 Actionを通してjspにフォワードするんなら、
executeでActionForm中のArrayListの項目を用意すれば
jspではsetしたその値が使えるはずだぞ。
どういうやり方してるのか、謎すぎる。
>>651 ActionForm以外の部分を指してModelといわれても、MVCモデルでアプリケーションを作ってないなら該当する部分がないし、MVCモデルでアプリケーションを作る必要があるわけでもない。
むしろ、アプリケーション全体をMVCモデルにするのは、流行ってない。
多対多関連がある項目で、入力項目数がDBで決まるとき class SampleForm extends ActionForm{ List sub = new ArrayList();アクセッサ略 } とあるときに、subの項目数がDBに依存するとき class SampleAction extends Action{ ActionForward excute(略){ int count = db.getCount();//データベースから項目数を取得 if(form != null){ for(int i = form.size(); i < count; ++i){ form.sub.add(""); } } } } としてJSP中で <c:forEach items="${sampleForm.sub}" var="item" varStatus="i"> <html:text property="sub[${i}]"/><br> </c:forEach> としても、入力後、Action#executeに渡る前にActionFormに入力値が格納されるから、手遅れと。
form.size() → form.sub.size()
class SampleForm extends ActionForm{ List sub = new ArrayList();アクセッサ略 void reset(略){ int count = db.getCount();//データベースから項目数を取得 for(int i = sub.size(); i < count; ++i){ sub.add(""); } } } としておくと、とりあえず丸くおさまる。
reset()ってチェックボックスのパラメータを初期化するために出来たメソッドでしょ? そこでDB接続ってなんか間違ってないか?
間違ってるというのなら、どこに書けばいいか教えて欲しいという話。
あ、コンストラクタでよさそうだ。
だけど、コンストラクタにはrequest情報が来ないから、DB接続をどこから引っぱってくるかが問題になるな。 ThreadLocal使うしかない。 requestから情報もってこようとすると、resetしかないということになりそう。
入力画面を呼び出すときに、ActionクラスでDBから情報を取得。 ActionFormをnewして情報をセットして、遷移先JSPのFORMのスコープに格納する KEYはstruts-configで定義したformの名前。 これでJSP画面が出たときには、既にActionFormに情報がセットされた状態になっている ModuleUtils、Struts1.1ならRequestUtilsを使えば、actionのpath情報からform名やClassTypeを取得することも可能
>>662 それだと、入力エラー時にActionFormを構築するタイミングが取れないので、問題ないですか?
submit時の入力値のパッキングに間に合わない気が。
>>663 スコープがリクエストってこと?
なんか条件が限定的すぎない?
>>665 違います。
項目数がDBで決まるの入力項目があって、String[]でもってもListでもっても、その領域確保のタイミングがreset以外に取れないという話。
ActionServletからAction#executeが呼び出される前に、その配列/リストに入力値が格納されるから、executeで領域確保しても手遅れで。
で、それは考え方としておかしいということなので、考え方としておかしくない実現方法を教えてほしいわけです。
あ、scopeをセッションにすれば解決するってこと?
>>667 アクセスするたびに項目数が変わるとかでなければsessionスコープで対応すればいいと思った
あ、別に変わっても関係ないか 入力項目など画面構成に関わる情報は、その前のActionで取得するのが普通だと思うけど
scopeをsessionにすればいいってわけか。 それはそれで気持ち悪いけど。
>>668 そしたら、sessionスコープが使えるときはAction#executeに書いて、複数画面同時に使うとか、ゆっくり使うからタイムアウトしても問題ないように、とかsessionスコープが使えないときはActionForm#resetメソッドということかな。
うーん、しかしこういう場合にsessionスコープ使うと、複数画面で同時に入力してしまうと、ユーザーが意図しないデータが入ってしまいそうで怖いなぁ。 TransactionTokenは必須だな。
そこまで気を使うくらいならresetメソッドの方がいい気がする。 resetにDB接続処理書いても、開発者が気持ち悪いだけで、ユーザーには弊害ないから。
MVCイラネ
プレゼンテーション層では、MVCがいいと思うよ。 MVCのModelのことを業務ロジックと言ってしまう人が現れるから、問題あるけど。
subのsetterを作って、 Action#execute()でDBからサイズを取得→List構築→ListをActionFormへセット→forward→JSP表示 じゃダメなの?
つかさ。
>>655 >としても、入力後、Action#executeに渡る前にActionFormに入力値が格納されるから、手遅れと。
これが意味わかんねーんだよな。
なんか全然とんちんかんなこと言っているように聞こえるんだけど、
思うところがあるんかね?
>>678 そこからSubmitされたときに、Action#executeでListが構築される前に、構築されてないListに値を放り込まれてException。
なんか、初期表示時にActionかませてないだけにも思えるけどなー・・・。
ああ、やっとわかった。 俺もsessionスコープでやるか、requestスコープの時はresetでList構築してる。
>>681 問題は初期表示のときじゃなくて、Submit時なんだって。
>>677 4年前は確かにMVCのMでビジネスロジックをまかなうっていう考えが流行っていたけど。
いまさらWebアプリケーション全体をMVCで考えるなんてバカげたことしないし、少なくともMVCで考えてない人が普通にいるのに、プレゼンテーション層以外の部分をModelと指されても、困るわけさ。
>>683 ただし、reset()の中でDBアクセスはしない。
初期表示前ActionでDBからList情報を取得、List構築をしたときに
要素数だけsessionスコープなどに入れておき、resetの中で
sessionスコープから要素数を取り出してList構築すればよい。
resetでDBから持ってきてしまうと、タイミングによっては
画面に表示されている項目数と送信時の項目数が変わってしまう可能性があるのでは?
>>685 そうするなら、sessionスコープでやってしまえば?
リスクは一緒なんだし。
マスタが変更されたときに、そのタイミングで項目数が変わるリスクよりも、複数画面開いて同時進行したときに項目数が変わるリスクの方がいやだな。
マスタが変更されたときの動作の矛盾は、いたるところであるわけだしねぇ。
それより、ユーザーの操作を制限してしまう方がいやだ。
>>686 そうすると入力値までsessionスコープで保持してしまうから
適切なタイミングでクリアしなければならない要求があった場合に
対応がめんどくね?
>>684 別にModelったって、最近のは、
データを格納しているModelにメソッドとして直接ビジネスロジックを記述しているものだけを指しているわけでないよ。
業務ロジックを隠蔽した、Delegateなり、Facadeなりで呼ばれる単独クラスなんかも含めて、
慣例的にModelと呼ぶんだよ。
>>687 そんときはそんときじゃない?
頻繁にある要求じゃないし。
>>688 それはそれで、慣例的に呼んでる、実際にどういう構造を示してるかわかりにくいものを、いきなり出されても困るという話になるのだが。
今の共通認識としては、ファウラーのMVCが有力候補なわけだし。
まあ、resetメソッド中でDBアクセスするのはいただけないな・・・ 例外が起こった時の対処はcatchして握りつぶすしかなくなってしまうし。 DBアクセスが必要な処理はexecuteから呼び出されるべきだと思うよ。
ただ、そのためにユーザー操作を制限していいのかどうか。 どうせそんなデータ取得時に例外発生したときには「メンテナンス中です」と出すしかないわけだし。 「万一複数画面で同時に入力を進めたときには、誤ったデータが入ることがあります。 開発者のポリシーを全うするためなので大目にみてください」 っていうのはどうかと。 resetメソッドでDB処理呼び出せば発生しない問題を抱えてまで、こだわることじゃないと思うなぁ。
ここはWebプログラミングのごとき低レベルなスレですね。
>>679 それをずーっと上の方で書いているんだけど、理解してくれないぽ。
StrutsってFormに自動設定するときに必ずアクセサ経由するんだろ? そんときにListサイズを、配送されてきたリクエスト値の名称のサイズに広げる、とかできないの? <input type="text" name="text01" value=""><br> <input type="text" name="text02" value=""><br> 見たいのが送られたら、ArrayListがnullだったら、newして、addよぶ。 sub = new ArrayList(); sub.add(str); nullじゃなかったら、そのままaddする、 sub.add(str); みたいな。 仕組み的になくても、setterでごりごり書いたりもできそうじゃん。 と外野が口を挟んでみたり。
>>695 結局、ActionFormからDB処理を呼び出すことになるんじゃない?
それだとrequestが得られないし。
それで処理がちょっと複雑になるならresetメソッドに書いたほうがよさげ。
>>692 >>685 の方法を使えば、resetでDBアクセスする必要は無いしFormの複数画面共有の問題も発生しない
FormでDB接続の是非よりも、submitする度にForm初期化だけの為にDBアクセスすることの性能問題の方が重要な気もするけど
>>695 たしかListのときはproperty名[0]みたいなアクセスするんで、addは使えないと思う
・・・っていうか、SortedMap使えばいいような気がしてきた
>>697 話を単純にするために要素数だけにしてるけど、実際にはそれぞれの要素の値をひっぱってきて保持することが多いよ。
どうせsubmitの度にそのデータを表示するわけで、使わないわけじゃないからムダにはならないし。
性能問題は、組みやすく組んでおいて、プロファイリングで問題があったところをチューニングすればいい話で。
http://www.res-system.com/weblog/item/242/ これどうよ。
これでいんじゃないの?
public ListType getData(int iIndex)
{
while (this.data.size() <= iIndex)
{
this.data.add(new ListType());
}
return (ListType)this.data.get(iIndex);
}
>>699 あぁ、それでいけるねぇ。
ありがとう。
ちょっとクセのあるコーディングしないといけないけど、resetに処理記述することに比べれば、問題ないね。 すっきりした。
レスが増えてるから何事かと思ったら、 int引数のgetterも知らんアレが大暴れですか・・・。
代表的なのは、時代遅れのMVCを振りかざす
>>644 と、問題を理解せず全然解決になってない解答だして得意になってる
>>645 か。
どちらもJava厨の典型だな。
MVCイラネ
いや、ユーザーインターフェイス周りでは必要でしょ。
MVCイラネ人はActionクラスに処理書きまくったりしてください むしろStrutsなんか使わずに全部JSPだけで作っちゃうのもいいかもね がんばってね@ITの山田さん
つうか、Actionクラスって、Struts使ってる時点でMVCでしょ。
>>707 本来StrutsはMVCでなくて C だけどな。
MVCのMはActionForm MVCのVはJSP MVCのCはAction そこから先はMVCじゃないモデル。問題ない。
>>709 >MVCのMはActionForm
これは後付けだけどね。
もともとそう思って作られてはいなかった。
ちゃんとStrutsはコントローラを提供しますよって書いてある。
ま、設計者がどう作ろうと使う方が好きに使えばいいだけなのでどうでもいいけどね。
Strutsを使えば楽になるのはわかってるんだし。
そのモデルって、上にリンクがあった、JSPがVで、EJBがMのモデル? Strutsはコントロールしきれないことがわかったし、EJBは重すぎだし処理とデータを混ぜたところであまりいいことなかったし、崩壊したね。
EJBはよほどデカいシステムじゃないと使えないし デカいシステムだからって盲目的に使えばいいってもんでもないしな。 次に期待だろ。
だから次はMVCモデルじゃないしね。
次はJSPモデルです。 PHPの敷居の低さを徹底的に追求しました。
Strutsスレはずっと何も実を結ばない与太話だけでスレが進行してるな 今見たら前スレもそうだった もう次スレはいらねえな
MVCとか概念的なもんは主観に基づく部分だから人によって解釈かわる。 それに縛られてメンテしにくいコード角なんて本末転倒。 MVCやるためにMVCやる。 OOPやるためにOOPやる。 そんならMVCもOOPもイラネ。
マジレスすれば、ValueObject+DataAccessObjectとか、DataTransferObject+TransactionScriptとか、まあ言ってることは同じだけど、そんな感じのモデルが流行ってるわけだね。
OOPも要らないよ。 そんなもんが必要な複雑なシステム、ほとんど作らないでしょ。
ActionFormがMってネタか? そもそもModelはStrutsには存在しないし依存しない
>>717 そんなもん流行ることがおかしい。
ほとんど同じプロパティを持つクラスが増えたら
メンテナンス性が悪くなる。
仕様の変更でプロパティが増減したとき、いちいち各クラスに適応しないといかん。
どーせBeanUtil.copyProperties()使ってるだろうから、
よりプロパティの足し忘れに気づかずあぼーん。
死ね。
>>719 なんか、自分が信じているものが消えてしまうのをみとめたくないみたいで、必死だね。
普通にActionFormはMVCのMで、MVCはStrutsの範囲にしか存在しないってことになってるみたいだけど。
>>720 VOで増えてActionFormに増えてないということは、そこで入力する必要がない項目ということだから問題なし。
ActionFormに増えてVOに増えてないということは、そこで格納する必要がない項目ということだから問題なし。
>>720 > そんなもん流行ることがおかしい
なんか、時代に取り残されているのを認めたくなくてわめいてるオヤジみたいだね。
>>721 >普通にActionFormはMVCのMで、MVCはStrutsの範囲にしか存在しないってことになってるみたいだけど。
いったいどこでそうなってるのかソース希望。
詳しくは、本をみてくれ。
>>725 その絵のModelがどうしてActionFormになるの?
Strutsで言うなら、ViewとControllerの間にある矢印がActionFormじゃないかと思うんだけど。
あと、ViewからModelに対して伸びてる矢印は、Modelからデータを取得するという意味だと思うけど
JSPはActionFormから何の情報を取得するの?
あと、ViewとContorollerからModelには矢印が伸びてるけど、Modelからは矢印が伸びてないというのは
ViewとContorollerはModelを知ってるけど、ModelはViewやContorollerのことを知らない(依存しない)
という意味だと思うけど、ActionFormはそれには当てはまらないね。ViewのFORMパラメータに依存してるし
ポカーン こんな理解力の人に説明するのは無理だわ。
> JSPはActionFormから何の情報を取得するの? 入力エラー時、JSPはすでに入力されている情報をどこから取得しますか? > ViewとContorollerはModelを知ってるけど、ModelはViewやContorollerのことを知らない(依存しない) という意味だと思うけど、ActionFormはそれには当てはまらないね。 Controller(Action)はstruts-configでどのActionFormの値を受け取るか設定する。 Controller(Action)はActionFormを知っている ひとつのController(Action)でいろいろなActionFormを使いまわすことはできない。 Controller(Action)はActionFormに依存する View(JSP)はhtml:formのaction属性に指定したActionが依存するActionFormから入力値の情報を得る View(JSP)はActionFormを知っている View(JSP)のひとつのhtm:formでひろいろなActionを使いまわすことはできない。 View(JSP)はActionに依存し、間接的にActionFormに依存する。 ActionFormには、JSPが特定できるフィールドも持たなければ、JSPを渡してくるメソッドも持たない。 ActionFormはView(JSP)を知らない。 ActionFormには、Actionが特定できるフィールドも持たなければ、Actionを渡してくるメソッドも持たない。 ActionFormはActionを知らない。 ひとつのActionFormは、いろいろなActionやいろいろなJSPで使いまわされる。 ActionFormはController(Action)やView(JSP)に依存しない。 図のまんまだと思うが。 > ViewのFORMパラメータに依存してるし それは、ViewがActionFormに依存するってことだろ・・・
>>729 > 入力エラー時、JSPはすでに入力されている情報をどこから取得しますか?
逆に言えば、入力エラー時の情報(ようするに入力したパラメータ情報)以外の情報は取得できないってことにならない?
入力エラー以外の情報(本来表示させたい情報)はどこから取得するの?
Actionで取得した値をActionFormにセットして遷移先のJSPで参照するのであればいいけど
Strutsはそういう使い方を前提とした設計になってない
遷移先のformで定義されてるaction-mappingパスに紐づけられてるActionFormを呼び出して
そこに情報をセットするのであれば、そのActionFormは処理結果の保持を行うModelだと言えないこともないけど
(そうするとStrutsのnestedタグから参照出来るから便利だし)
> ひとつのActionFormは、いろいろなActionやいろいろなJSPで使いまわされる。
その視点から見れば確かに依存してないね。
あるActionFormとValidatorパターンが存在して、そのフィールド定義を利用してJSPの画面を
構築すれば、ActionFormを使いまわして新しくViewを作れるって話か。
2つの質問の回答内容を合わせると、ようするに入力チェックという処理に対するモデルがActionFormだということかな?
「UIに関するMVCはStrutsで完結している」という話は、つまりそういうことが言いたかったの?
元々言われてたMVCはもっと広くて単純な意味で使われてたと思うので、そこにギャップがあるのかな?
>>730 > 元々言われてたMVCはもっと広くて単純な意味で使われてたと思うので、そこにギャップがあるのかな?
そう。いまはその広い意味のMVCで業務アプリケーション構築してもうまくいかないことが、経験からわかってる。
それと、StrutsのMVC機構がうまく働くのは入力処理だけで、単純な一覧表示なんかは特にStrutsに依存したMVCにする必要がないので、そのときにActionFormがMになる必要はない。
>>731 だって、この場合のMはEJBで、そのEJB自体のいまの扱われ方を見れば、MVC2が使い物になるモデルだったかどうかがわかる。
結局、ユーザーインターフェイスをVCとして残りをすべてMに押し付けるというのは、あまりにも乱暴で、Mが重すぎたという話。
EJBが重かったのは、ユーザーインターフェイス以外を全て押し付けられた結果だといえる。
最近流行っているというか、とりあえずシステムが組みやすいのは、プレゼンテーション層・業務ドメイン層・データベース層に分けるモデル。
で、そのプレゼンテーション層は、MVCでやるのがいまのところは一番うまくいっている。
データベース層は、ORマッピングでもいいし、ただDBUtil使うでもいいし、データベース層をもたなくてもいい。
業務ドメイン層は、オブジェクト指向にこだわらずひとつのメソッドで処理を流すトランザクションスクリプトと、オブジェクトモデルを構築するドメインモデルがある。
だけど、よっぽど複雑な業務じゃないかぎりは、ドメインモデルを組み立てる手間がバカにならないので、トランザクションスクリプトの方がいいみたい。
ttp://www.ric.co.jp/sol/contents/sol_0407/sol_architect.html ファウラーが言ってることがすべてだとは思わないけど、今のところはこれでうまくやれそうだし、他に使えそうなモデルの話を聞かない。
補足しておくと、層の数は、規模やら用途に応じて、サービス層が入ったり、いろいろ変わる。 規模が小さければ、プレゼンテーション層ですべてまかなっても問題ないし。 ただ、プレゼンテーション層のMVCで、MやVはCより向こう側のことに興味をもたないようにする。
734 :
デフォルトの名無しさん :04/12/27 17:49:30
同じアクションに遷移する二つのpathがあるとして、 <action path="/hogeA" type="HogeAction" name="hogeForm" scope="session"> <forward name="hoge" path="/hogeA.jsp" /> </action> <action path="/hogeB" type="HogeAction" name="hogeForm" scope="session"> <forward name="hoge" path="/hogeB.jsp" /> </action> HogeActionの中で/hogeAから来たのか/hogeBから来たのかを 判別したいのですが、どうしたらよいでしょうか? よろしくお願いいたします。
>>734 ActionMapping の getPath()
APIドキュメントぐらい見ろよ。
それともexecute()の引数に入ってくるオブジェクトが何なのか考えたこともないとか?
>>734 的には、「まず、一人。」ってところなんだろうか・・・?
乗り遅れたが
>>699 の処理ってlazyList使うべきだよな。
もはやどうでもいいけど。
まあ、引き合いにでてるのがGETTERじゃあ無理もない間違いだが……。
SpringやSeasarのStruts連携機能を使ってるところってどれくらいあるんだろう? どちらもActionクラスのインスタンスをリクエスト毎に作成してフィールドにDI出来るのを 売りにしてるようだけど、リクエストの度にActionのインスタンスを作るってところが どうも引っかかる。パフォーマンス的には問題ないんだろうか?
>>740 Actionのインスタンス生成と、Listのインスタンス生成と、どれほど差があるか考えてみ。
で、どんだけexecuteからの処理でインスタンス生成しているか。
そしたら、Actionのインスタンス生成って誤差くらいにしかならんよ。
ここが問題になるくらいパフォーマンスが厳しいんなら、別のこと考えたほうがいいだろうし。
ってか、気になるなら、singleton="true"にすればいいだけの話。
>>741 漏れは740じゃないけど。
Actionのコンストラクタで、
そのActionで用いるビジネスロジックの初期化、
そのビジネスロジックのコンストラクタで、、、
をいくつかやってると、ちょっと気になるけどな。
まぁシングルトンで。
>>741 今までServletの延長のように使ってきたActionの生成方法を変えるわけだから、本当に大丈夫なのかちょっと気になってしまったので。
実際に誤差ぐらいにしかならなかった? それなら何の問題も無いし、DIコンテナとStrutsが連携する最大の利点にもなるんだけど
ActionクラスをBean的に使えるようになるから、フィールド使い放題になるしね
そもそも、StrutsのActionクラスの設計方針がおかしかったってことにもなってしまうが
>ってか、気になるなら、singleton="true"にすればいいだけの話。
いや、それじゃActionのフィールドが使えなくなるから、DIコンテナの恩恵が受けられなくなるので連携する意味が無いのでは?
Servletはなぜリクエスト毎にインスタンスを生成しないモデルなのか? という理由を考えるとびみょー。
それで、ここまでstrutsを使ってきたおまいら的に、 総合的に見てStrutsのメリットとデメリットをまとめていただけませんか?
メリット ・普及している ・情報量が多い ・Strutsを使えるエンジニアが多い デメリット ・カスタムタグが糞 ・ActionでServlet APIを使うからテストしづらい ・ファイル数がやたら多くなる(ある程度仕方ないと割り切りが必要ではある) ・フレームワークを隠蔽できてないので中で何をやっているかを理解しないと 使いこなせない
>>743 > いや、それじゃActionのフィールドが使えなくなるから、DIコンテナの恩恵が受けられなくなるので連携する意味が無いのでは?
どうせDIするのはシングルトンなクラスのオブジェクトだから問題ない罠。
>>745 デメリット
・みんながフレームワークといってるからフレームワークだと思ってしまって、アプリケーション全体をStrutsに依存した設計にしてしまうヤツがいる。
>748 これについてもうちょっと詳しく説明してもらえないでしょうか? どこをどうしたらアプリケーション全体がStruts依存になるんですか?
フレームワークはアプリケーションのアーキテクチャを決定づけるから アプリケーションがフレームワークに依存した設計になるのは当然だと思ってたよ。
Strutsの場合、アプリケーション全体のアーキテクチャを決定づけるようなフレームワークじゃないからね。 プレゼンテーション層のフレームワークでしかない。 っていうか、ライブラリっていうには大きいからフレームワークって呼んでるだけなのにね。
> っていうか、ライブラリっていうには大きいからフレームワークって呼んでるだけなのにね。 あなたがここで言う「フレームワーク」の定義を教えてください。
>>753 .NET レベル以上でサポートしてないとフレームワークとは呼びたくないわけだね。
ただ、「ライブラリ」と「フレームワーク」は違うものだと思うから
「○○なライブラリをフレームワークと呼ぶ」という表現には抵抗がある。
>>754 俺的にはStrutsTestCaseすらめんどい。
JUnitだけで済ませたい・・・って横着かな?
>>747 S2Strutsのドキュメントにも書いてあるけど
ActionのフィールドにDI出来るのはprototypeを前提としている
singletonなActionでセッターインジェクションするのは
Servletでフィールド使うようなものじゃない?
>>755 > 「○○なライブラリをフレームワークと呼ぶ」という表現には抵抗がある。
でも、Strutsの説明でのフレームワークはだいたい「Don't call us, we'll call you」な仕組みとかしか書いてない。
>>756 DIでActionに対して組み立てるクラスは、結局Servletでフィールドに使っても問題ないようなものになると思う。
>>757 ライブラリはまさにその逆。
こっちが作るプログラムから呼び出すものでしょ?
>>759 あぁ、つまり
「ユーザーコードを呼び出すクラス集合のことをフレームワークと呼ぶ」
みたいな感じならOKってことかな?
>>760 まあ、だいたい。
ライブラリは機能単位で切り出して再利用可能にしたもの。
どこでどう使おうがこっちの勝手。
フレームワークはどこにどうやって何を実装するのかも決まっていて
その通りに実装してあげると呼び出してくれるもの。
ってなかんじかなぁ・・・
>>761 その意味とは別に、アプリケーション全体のアーキテクチャを決定づけるようなツールや部品群のことを呼ぶフレームワークがあって、Strutsが後者のフレームワークだと誤解されることがあるのが問題ってのはOK?
>>762 OK。
.NET や、さらには SAP R/3 などの業務アプリフレームワークみたいな
とらえ方をされると問題だね。
>>761 > その通りに実装してあげると呼び出してくれるもの。
それはただのテンプレートパターンじゃねーの?
テンプレートパターンだけのフレームワークなんか見たこと無い。
テンプレート + ライブラリ = フレームワーク
ライブラリは整理されていれば多くてもいいが、
テンプレートメソッドが多いのは糞フレームワーク。
テンプレートパターンはフレームワーク作成者は分かりやすいと思ってるか
知らんが、使うほうとしては勝手に呼ばれるのは直感的ではない。
例えば HttpServlet はテンプレートメソッドが大杉の悪い例。
「あなたは私を呼ぶ必要はない。私が必要な時にあなたを呼ぶから。」
あなた=ユーザコード ではなく、あなた=フレームワーク でもいいが、
要はバランスか。
>>764 > それはただのテンプレートパターンじゃねーの?
違うと思うが・・・
>>758 スレッドセーフなクラスしかDIできないのなら、既存のStrutsシステムに
DIコンテナのStruts連携機能を導入するメリットはほとんど無いということになるね。
現実的には、SpringのFactoryBean的な機能を委譲させたオリジナルクラスを
FactoryMethodパターンで生成し、それをexecuteメソッドの中で利用するという形になるのか。
そうすればAction生成は既存のまま、DIコンテナにあまり依存せずにビジネスロジックとの疎結合を実現することは可能っぽい
>>764 JavaWorldに載ってたけど、StrutsのActionクラス設計はCommandパターン、
RequestProcessorによる呼び出し方法はTemplate Methodパターンを使ってる
そもそもStrutsはServletを基本にコントローラ機能を実装した仕組みだから、呼び出し方法自体はこれでもいいと思うけど
実装するクラスが継承でガチガチに固められているので、結局似たようなクラスを大量に作る羽目になるのが嫌なところだと思う
> 現実的には、SpringのFactoryBean的な機能を委譲させたオリジナルクラスを 間違えた、BeanFactory的な機能だった
1.2って1.1と下位互換ある?
>>768 ある。ActionErrorsなど非推奨になったクラスのコンパイル時に警告はでるが。
ただし、1.1で既に非推奨だったものは1.2で切られたからだめ。
>>769 ありがとう!
これで心おきなく1.2に移る準備を始められるよ。
1.1の設定ファイルそのまま使ったらvalidationせず素通りした覚えがある フォーマットに違いがあるかも
>>771 推測だけで書くけど、
設定ファイルにミスがあって1.1ではスルーされてたけど
1.2ではそれが顕在化しただけじゃない?
漏れはTomcat4と5で、そういうの体験した。
773 :
デフォルトの名無しさん :05/01/16 01:09:22
すいません。 最近strutsを始めたのですが、strutsのタグってその多くが jstlのタグと機能が重複してるように思います。 それなら新しく覚えるよりも、慣れてるjstlのタグの方を使いたいです。 でも、strutsを使う以上はstrutsのタグを使う方が一般的なので しょうか? 教えてください。
strtusタグはJSTLが存在しないときに設計された。 使いやすいほうを使え。 以上。
JSTL1.0が出た頃、このスレとかで質問したんだけど、 StrutsスレなのにStrutsタグ使わないような質問するやつだということでえらい罵倒されまくったな。 懐かしい。時代も変わったな。 Strutsタグ使わないやつは邪道扱いされたもんだが、俺を罵倒した他人のケツ追いか けるしか脳のないアホども、元気か?
776 :
デフォルトの名無しさん :05/01/16 14:31:41
strutsタグは、jstlと比べてデザインが悪い。使いずらい。覚えずらい。 同じ機能タグでも設計者によって、あそこまでの違いが出るいい見本だ。
777 :
デフォルトの名無しさん :05/01/16 18:43:05
1.1から1.2にあげてこれが大変だった、ってのある?
>>773 JSTLを既に知ってるのであれば、htmlタグ以外の機能が重複するStrutsタグを覚える必要は無い
ちなみにStruts2.0でJSTLとJSFに正式対応する予定
>>777 別にない。
ActionErrorとかそこらへん書き換えるのが面倒だったぐらい。
1.1の時に非推奨使わないようにしてたし。
>>780 でも当分先だよねえ。
今Struts1.2.xの開発中でしょ。その後1.3, 1.4 とかも予定されてるし。
JSFに対応ってどうするんだろ。
大きく変わりそうだなあ。
Struts-facesも止まっているような感じだし、のんびりしてると
デファクトスタンダードが変わっちゃうんじゃないのかな。
JSFに対応ってか、統合じゃね?
>>784 それはない。
StrutsがJCPのJSRプロポーザルになって標準化するとでも?
StrutsカスタムタグもJSTLもJSFのUIコンポーネントも
どれも標準で使えるようになるってのが現実路線でしょ。
>>783 デファクトは変わるだろう。そもそもStrutsの作者がJSFのスペック・リードの一人なんだし。
2.0の提供が遅れるようであれば、Webアプリケーション開発に無条件にStrutsを採用するような時代はそんなに長く続かないかもね
>>786 XDocletのような、オープンソースの開発支援ツールが出てこないと
JSFの普及は難しいんじゃないかな。
今のところ、事実上JSFは商用IDEでの開発が前提とも言える状況。
これじゃ、JSF APIの使い方よりも、IDEの操作方法を覚えろって感じ。
>>782 じゃ Struts 使うなハゲ。
J2EE 標準だけで組め。カス。
>>787 > IDEでの開発が前提
そのためのJSFでしょ。
今度途中参加するプロジェクト、Struts使ってるんだけど、html系(formとか)のタグとか使ってないらしい。 Struts使う意味あるんかな?
Strutsの一番の役割は、リクエストパラメータをActionFormにパックすることだから、他は好みで。
Form以外はJSTLのでいいんじゃないかな
>>790 だから、高機能なEclipseプラグインとか出てこないとなかなか普及しにくそう。
各社操作方法も機能もまちまちな商用IDE前提ではStrutsのシェアをひっくり返して
デファクトスタンダードになるのは難しいのではないかと
>>791 option以外、大して使う意味ないからね。htmlタグ。
<html:form>で囲った部分が自動的にFormBeanになったりするのなら
まだ意味があったのだが。
後で機能付けるつもりで途中でやめてしまったのかも。
まあ、付けようもないし。
1.2って式言語サポートしてます?
contribのstruts-el使えばいいのかな
Tomcat5使うのがいい。
strutsタグ使えば自前でxss対策しなくてよい。
>>778 >>781 validatorとかActionErrorとかって、めっちゃ数多いし大変そう
バージョン変えるタイミングってどうやって決めてる?
Strutsに限らずタイミング難しくて古いモンばっか使ってる
>>801 作ったもののバージョンは変えない。
いまから作るものは最新バージョン。
作ってるものは、進捗具合で考える。
>>802 俺もそれが妥当だと思う。
既に1.1で動いているもののバージョンをわざわざ上げるメリットは
あまり無いと思う。
まったくないと思う
<foo:select property="bar" /> みたいなカスタムタグ単発で、 <html:select property="bar"> <html:options ... >... </html:select> のような Struts 用のフォームタグを吐き出す(かつ JSP に更に解釈させる)ことってできるでしょうか? ストレートにやったら <select> タグじゃなくて <html:select property="bar">... のまま出てしまい、 どうすれば JSP 側に Struts 用のタグとして解釈させられるのかわからず困ってます。
>>805 taglibは一回しか変換を行なわないんじゃないの?
カスタムタグもStrutsのタグもtaglibではないかと。
>>802-804 バージョンアップを続けていくシステムの場合は?
新規に作る分はそれでいいと思うけど
>>805 806の通りだと思う。
strutsのhtmlタグって、ほとんど何もしてないんだから(値の出し入れ程度でしょう)
自前でhtmlを出力すれば良いんじゃないかな。
あと、思いつきで書くけど、
strutsのtaglibクラスを直接叩いて、結果を出させるとか、出来ないかな?
>>807 マイナーバージョンアップでは変えない。
メジャーバージョンアップでは可能な限り最新。
ライブラリのバージョンアップでの機能追加は、今まで作った動いているものを変更するリスクをわざわざ負うほどのものじゃないことがほとんど。
>>806 >>808 ありがとうございます。
やっぱり変換は初回限定なんですね... ( ´・ω・`)
ひとまず自前出力でやってみます。
かさばるタグの部品をマクロっぽくまとめられたらというつもりだったんですが、
あんまりそんなこと考える人いないのかな...
>>805 ・・・そのタグ書いたタグファイル作ればいいだけかと。
>>810 ん、であればJSPをincludeしたら良いのでは?
>>810 そんなときこそ、Velocityと組み合わせるのだw
正直なところ、使いやすいものではないよな どうせみんな、Actionにはほとんど何も記述してないんだろ? BeanUtilsでプロパティコピーして投げて、返球を格納するだけだろ? ActionFormは痒いところに手が届かないし struts-configがでかくなったらform-beanは見つからないし sessionのことをすっかり忘れて開発してるし HttpRequestは手放せないからいらん! setUp()でValidateと値を格納 perform()がコントローラ tearDown()で格納 って、ああ、分岐したらどうしよう 分岐の数だけメソッドを準備してServletに呼び出させるか ServletでもちろんHttpRequestを隠蔽して単体テストを簡単にして うわらばがふ…わしには設計できねえ でも、ActionとActionFormは分ける必要ねーーー
>>815 つまり、XDocletすら使わず文句いってると。
>>815 なんつぅか、世に出てる本が悪いと思う。
俺もそう思ってたが、使いこなせるようになると、まぁ楽に開発できる。
あと、アクションマッピングのnameとinputはネーミングミスとはいえ
いくらなんでもひどすぎる。あれがより難解なイメージを抱かせる。
>>817 楽には開発できるよ
そのとおりさ
でも…散々食べ散らかして汚くなったソースの改修がつらいんです
自分ひとりで作るならいいんだよ…
Strutsは無駄に複雑なんだよね。 あの使いづらいタグもしかり。 JSF見るとよけいにそう思える
>>817 nameとinputはひどいな・・・。
struts-config.xmlのガイドってないんかなあ。
>>820 DTD見るのが早い。ちゃんとコメント書いてあるし。
>>813 include ならいけますね。属性は残念ながら渡せないけど。
でも request の attribute 経由で値とか渡せるからこれでいいかもです。
>>814 やはり taglib より先に展開されるテンプレートでないといけないわけですね。
823 :
デフォルトの名無しさん :05/01/22 04:25:19
Strutsで一番きらいなもの挙げれ。 ActionForm
struts-config.xml
むぅ、VelocityからBean参照するとき、Bean名にピリオド入ってるとだめだね。 せっかくBean名全部パッケージ名つけるようにしたのに・・・
む・・・わかりにくいか。 ${bean.name}みたく、"{"と"}"をつけるという意味です。
actionForm.setData(data, org.apache.struts.SESSION) キボン
この間確認してみたら、ActionFormも使ってないらしい。もちろんValidatorも。 Actionディスパッチにしか使ってない。ホント、なんでStruts使ってるんだろう?
>>831 Actionのサブクラスのexecuteメソッド内でHTMLを吐いていない限りは
Strutsを使う価値はあると思うが。
>>832 RequestDispatcherの記述が省略できる程度にしかならなそうなんだけど・・・
コスト対価値の比率が著しく悪そう。
うん、最近無理にActionForm使うんじゃなくて、 業界標準のコントローラフレームワークだと割り切ったほうが いいような気がしてきた。
Strutsの質問はここでよかったでしょうか? FAQじゃないかと思うんですが、ぐぐって見つけられなかったので。 ActionFormのvalidationやAction内部でエラーが発生したとき、 いったんエラーメッセージ専用の画面を表示して、その「戻る」ボタンを クリックすることで、そのエラーの原因になった入力画面に戻る、という 画面遷移にしたいんですが、こういう場合、標準的な方法ってあるのでしょうか。 今考えているのは、RequestProcessorのサブクラスを作り、その中で、 mapping.getInput()でinputページのパスを取得してセッションにでも投げ込んで、 グローバルフォワードで飛ばしたエラー画面のアクションでそのページに戻す、 という方法なんですが、こんな画面遷移はありがちなだけに、絶対標準的な 方法があるだろう、と思うわけです。
input にその専用エラーページ書けばいいんでは?
>>836 それで「専用エラーページ」に戻ることはできるけど、その専用エラーページ上にある
「戻る」ボタンで、元のページ(そのエラーの原因になった入力画面)に
戻ることはできないですよね?
> mapping.getInput()でinputページのパスを取得してセッションにでも投げ込んで、
よく考えると、この方法も、アクションで検出したエラーでは使えても、
ActionFormで検出したエラーには使えそうにないですね。
validatorプラグインで、 class ChildForm extends ValidatorForm { String name; /* Getter / Setter省略 */ } class ParentForm extends ValidatorForm { ChildForm[] childForms; /* Getter / Setter省略 */ } みたいなパターンのChildFormの検証ってできますか? parentFormのvalidateをオーバーライドして、super.validate後に各childFormの validateメソッドを起動するようにしてみたんですが、NullPointerExceptionが 起こってしまいました。 ソースを見るとgetServletで例外はいてたので、childFormのvalidate呼び出し前に childForm.setServlet( this.getServlet() ) とやってみたら、例外は吐かなくなりましたがChildFormの検証にもvalidation.xmlでの ParentFormと同じルールを使ってるらしく、うまく動作しませんでした。 なにかヒントだけでもいいので、ご教示いただけないでしょうか?(Struts 1.1です)
>>838 Struts1.2.xならできるけどね。
>>838 たしかstruts-config.xml でactionとformが対に定義されるから
デフォルトだと無理だったような気が。ソース読めば
自力で任意のactionで任意のフォームをvlaidateするコードの
書き方がわかると思います。結構簡単なはず。
で、
>>839 そのやり方をもう少し詳しく。
XP上でStruts使った開発・動作確認やっててブルー画面頻発。 原因不明だったが、Linux上で動作させたら一発で原因判明・ 即解決。貴重な経験でした♪
どうやったらそんな不可解な現象が発生するんだ?
まー、>841 の環境が腐ってるだけだろ。
Strutsが原因でブルー画面なんてあり得ない。 てかXPでブルー画面見たことない。
>>845 俺ある。
もちろんeclipseとは何の関係もないけど。
同じフォームBeanで、アクションによってバリデーションの中身を変える、 とかってできないの? validateメソッドの中でActionMappingとかリクエストの中身みて コセコセ分岐させるしかないんでしょーか。 バリデーションに使うメソッド名をstruts-configの中で指定できればいいのに....
>>848 ValidatorFormじゃなくてValidatoActionFormを使う。
バグってたの直ったのかな> ValidatorActionForm
class ParamForm extends ActionForm { フォームのプロパティ定義 } class FormForAction1 extends ParamForm { action1用のvalidateのみ記述 } class FormForAction2 extends ParamForm { action2用のvalidateのみ記述 } action-mappingではaction1にFormForAction1、action2にFormForAction2を指定 こんなので大丈夫なのかな。
うろ覚えなんだけど、validation.xmlだけで完結しないんだっけ?
>>851
formは共通で書いてよくて、validator.xmlのみで制御できたと思いまつ
>>854 validator.xmlというファイル名はあまり使わんな。
validation.xmlで<field page="n"を使ったらどう?
>>855 そのpageというものがなぞの存在だと思っていたが、
素敵な代物でつか?
>>856 実は、ValidatorFormクラスには、int page;というプロパティとsetter/getterが存在する。
で、ページ上にhiddenでも何でもいいからpageというリクエストパラメータ(整数)を送ってあげるのね。
そんで、<field page="n"とパラメータで送られた値が一致した場合にのみ、この設定が
適用されるってわけ。
長大なアンケートページとかで、複数ページにまたがって入力項目があり、それを
ひとつのsessionスコープのActionFormで使うような場合で、各ページでValidationの
ルールが違う場合などが想定されているらしい。
>>857 先生!スゲー勉強になりました!
thx!
このスレで訊いて良いのかちょっと迷ったが、初心者スレの内容でもないからとりあえず・・ ユーザー認証・アクセス権限関連のフレームワークみたいなものってあります? DB/XMLなどから権限の設定などを読み取り、 ログイン時やページ毎の権限チェックなどをしてくれる感じ。 自分で作ったが今ひとつ満足できず、 何か参考になるものがあると良いなと思って。
validator.xml って使えば使うほど面倒なんだけど validate メソッドに書くのと比べてそんなにいいか?
>>857 その説明を信じると、page使うときって、悪意を持ったユーザがパラメータを送信しないようにしたら
validatioすり抜けてしまいますよね。
サーバーサイトで強制的にNpageのvalidationを行うってことは
可能でしょうか。
1page -> 2page -> 3page -> 最終ページで全validationを走らせる、とか。
サーブレットコンテナが持ってる認証機構を使う
>>860 XDoclet使うから使えば使うほどってほどじゃない。
>>860 validator.xmlってまったく使わないな。
validation.xmlならよく使うけどw
・・ってか、XDoclet使え。手書きなんかするものじゃない。
Tomcat起動直後、httpsでアクション開いて、 次にhttpのアクションにフォワードすると、 別セッションになってしまいます。 逆にhttp -> httpsの順にフォワードしたら セッションは引き継がれました。 https->httpでセッションのアトリビュートに乗せた情報を なんとか引き継ぎたいんですがよい方法ないですかね?
868 :
デフォルトの名無しさん :05/02/03 01:24:08
<html:link>の使い方に関して教えてくだされ。 例えば、複数OrderとItemがあって、1つのOrderの中にItemが複数入ってる Listがあるとして・・・ 出来上がりのイメージとして、以下のようなリンクを作成したいのですよ。 <a href="/itemDetail.jsp?orderNo=0001&itemNo=1"> <a href="/itemDetail.jsp?orderNo=0001&itemNo=2"> <a href="/itemDetail.jsp?orderNo=0002&itemNo=1"> ・・・ で、JSPで普通に書くと、↓のような感じかと思うのですが loopの始まり <a href="/itemDetail.jsp?orderNo=<%=order[i].getNo()%>&itemNo=<%=order[i].getItem(j).getNo()%>"> loopの終わり と、いうことを<html:link>を使ってやりたいんですが、?以降の指定の方法がわからないんです。 どうやるんでしょうか? あ、strutsは1.2.4です。
struts-configは、いまの主流は自動生成ですか? やるとしたらどのツールで?
XDocletつかえ。
>>867 なるほど、存在は知ってたけど、ssl対応ってことは
たぶんセッションの同期もうまくいくんだろうね。
でもApacheとjk2で連携させてるとうまくいかないとかいうカキコもあった・・・
http<->https間のフォワードは自力で解決してしまったので、
単にセッションの同期だけとれればよいのだけど。
>>871 セッションの同期ができないのは、ブラウザ依存になる部分もあるから
切り分けが必要。ブラウザ側で別々にCookie管理をしちゃう。
Struts SSL Extension は、そんなブラウザのために
強制的にURL RewritingをしてセッションIDをURLパラメータに付加するオプションあり。
XDocletでDynaActionFormを扱おうとすると、 ダミーのBeanを作る必要があるよね。 これって逆にDynaActionFormの利点を損なうことになってない? それとも俺が使い方間違ってるのかな?
Xdoclet使うならDynaActionFormは捨ての方向で。
DynaActionFormってメリットがほとんど感じられない。 setter/getter作らなくていいってだけ。IDE使うとsetter・getterは 自動生成できるからもはやデメリットしか無い。
>>874 &
>>875 ご両人のご意見から、
XDocletでDynaなにがしFormを使うのはやめときます。thx!
xdoclet使うとJBuilderのアクションデザイナが使えないから、と却下された。 どこが使いやすいんじゃあんなの。 > アクションデザイナ xdocletのほうが断然いいっての
ビジュアル系のツールはマウス握らないといけないから面倒だよね。
XDocletで同じActionFormを複数インスタンスで使いまわす書き方ってできますか?
>>879 いっこだけXDocletに記述して、あとはaction-servlets.xmlにコピペして編集
やっぱりそうか。 ActionForm用にstruts-config.xmlを分割すれば修正忘れも防げるけど、いまいち。
つーかさぁ、遷移情報その他もろもろを一つの場所で管理できて、ソースいじんなくても 云々っていう理由でStruts-configってあるんでしょ? Xdoclet使ってたら言ってること間逆だよね。EJB3もそうだけどさ 時代が変わったのかと思いきやJSFにもfaces-configって在るぐらいだからそーでもないっぽいし、 好みと開発規模で使い分けろって事か?
>ソースいじんなくても 云々っていう理由でStruts-configってあるんでしょ それこそ神話。 Xdoclet使う時点で、strutsの理想に反するのはわかってるが、 今作りやすいことの方が何よりも大事。
今はDTDやスキーマでXML文書入力補助してくれるエディターもあるし XML書くのは昔ほど苦にはならなくなってきた。GUIな設定ツールなんかよりよっぽど早く書けるし そうなると逆にXDocletとかEJB3のアノテーションとか蛇足のように思えてくるのだが
まぁあれか、早い話連動すればいい訳だな、 一方を修正すれば他方も自動的に修正されるような そーすれば可読性や保守性と開発効率が相反しない訳だ。 今後はツールと連動してそういう様な仕組みが一般化するのかもね。 xdocletじゃなくてもこれからは「Java標準」のアノテーションも在る訳だし と勝手に一人で納得してみるテスト
XDoclet2はアノテーション前提でいくのかな? 早くStruts1.2正式対応して欲しい
Strutsのタグで<html:radio>って、iterateの中で回して表示すると 全部 checked="checked"ってついちゃうんですけど、 なぜ? <logic:iterate id="hoge" ・・・> <html:radio name="hoge" property="hoge1" value="<%=hoge.getValue()%>"> </logic:iterate> このコードにすると、でてくるradioにすべてチェックが入るんですよ。 <input type="radio" name="hoge" value="0001" checked="checked"> <input type="radio" name="hoge" value="0002" checked="checked"> これって制御できないですか?
>>887 なんでstrutsタグ使ってるのに、わざわざ<%%>で値入れてるんだ?
EL&JSTLという方針で・・・
>>882 > 遷移情報その他もろもろを一つの場所で管理できて
ファイル名にフォワード名つけて、その名前をソースに書くのと、ソースに直接書くのと、結局いっしょ。
しかも、ファイル名が隠蔽されるだけで、遷移情報ほとんど管理できないし。
struts-configにまとめてファイル名書いておいて嬉しい思いしたことがない。
ってか、「まとめて書いててよかったぁ」って思ったことあるやついるのかな?
ActionやらActionFormが100近くなってくると、該当する場所探すだけでも面倒だし。
>>887 カスタムタグのソース見たほうが早い。valueが何をしてるか嫁。
Strutsのソースは読みやすいから大丈夫。
>>889 おまいのとこではただのスクリプトレットを EL って呼ぶのか。
オレはvalidtor.xmlが面倒だな。
validator.xmlという名前のファイルは使ったことがない
894 = O型 895 = A型
900 :
デフォルトの名無しさん :05/02/10 20:37:09
tomcat5.5.4 + Struts1.2.4でファイルアップローダを作成しています。 そのアップローダページのJSPで2つのフィールドを設けています。 1つはファイルを指定する<html:file>のフィールド、もう1つは普通の<html:text>フィールドです。 <html:form>で、enctype="multipart/form-data"を指定しているのですが、 こうすると、2つ目のフィールドに日本語を使用すると文字化けしてしまいます。 struts1.2ではこの問題が解決されているとあるサイトで見たのですが、 Struts1.2.を使っているはずの私の環境では化けてしまいます。 何かわかるかたいらっしゃいましたらご教授願います。
901 :
デフォルトの名無しさん :05/02/10 21:22:09
>>900 一番簡単な方法は、その文字化けしてるStringを
String title = new String(((String) daForm.get("title")).getBytes("ISO-8859-1"),
"Shift_JIS")
とする事です。
>901さん やはりそれが一番簡単でしょうか。 Struts1.2以上で解決されていると言う情報があったのでもしかしたらと思って質問させていただきました。 どうもありがとうございました。
解決されてるのだろうか? MultipartRequestHandlerにもそれらしきメソッドがないし、encodingが 付いたメソッドもない。 しかし、Javaは国際化とか言ってる割には、SunやJakartaの開発者達は 本当に文字エンコーディングと文字化け問題に対する認識がないね。 プロジェクトを増産する前に、そーいう所をしっかりやって欲しいよ。
>>903 HTMLの仕様は関係ない。
multipart/form-dataで送られるテキストは、リクエストヘッダに続くボディ内に
バイナリで格納されるだけだから、ストリームから読み込んだbyte[]を
new String(byte[] b, "Shift_JIS") とすればいいだけだ。
問題はその"Shift_JIS"を指定する方法がない事なんだな。
<controller>タグ内の<multipartClass>に続いて<multipart-encoding>
みたいなタグがあって、それで指定できればいいんだけどね。
ちゃんとrequest.setCharacterEncoding()してるか? Strutsのファイルアップロードでは、request.getCharacterEncoding()して request.setCharacterEncoding()でセットされた文字エンコーディング名を 取り出し、それを使ってMultipart部分の文字エンコーディング名を指定している。 なので、一見関係ないようだがrequest.setCharacterEncoding()していないと。
↑というのが、1.2から追加になった。
908 :
デフォルトの名無しさん :05/02/11 08:45:05
<%@ include file="..." %>で日本語を含むJSPをインクルードしようとしてるのですが、 インクルードしてくると文字化けします。インクルードをやめて、中に直接記述すると文字化けしません。 これは何故ですか?インクルード元JSPとインクルードされる側JSPの文字コードは一緒です。 インクルードされる側JSPは以下のようなものです。(ログインしていたら表示するイメージ) <logic:present name="UserName"> <bean:write name="UserName"/>でログイン中です。 </logic:present>
テーブルにiterateとかnestedとか使ってると ときたまインデントがえらいことになっちゃうお。
つうか、カスタムタグでインデントするなら、出力されたコードでのインデントはあきらめろ。 むしろJSPでインデントはあきらめろ。
またJSTL廚か。
厨っていいたい年頃なんだね。
>>914 廚じゃなくてほんとのバカか。
>910 の問いに >912 の回答が的確だと思ってるのか。
JSTL 大好きなんだね。
>>916 あー、問いじゃないな。
だが、JSTL 大好きなのは間違いじゃないだろ。
だが、厨というのは正しいとはいえないだろ。 JSTLが使える状況でJSTLが使えるならStrutsタグ使わない方がいいし。
Struts制作の場合、JSTLタグとStrutsタグ、どっちを使うのが 正しいのでしょうか? どちらも3年前に制作されてますが、どっちがスタンダードなのか 未だに判断できません。 自分としてはJSTLの方が使いやすいのですが・・・
> どっちがスタンダードなのか未だに判断できません。 それは、情報収集能力に問題がありそうだ。 JSTLは「Java Standard Template Library」だぞ。スタンダードだぞ。 Strutsは、htmlタグ以外のカスタムタグは使う必要ほとんどなし。 ActionやActionForm系以外の仕組みは、あまり使う必要ないと思われ。
JSTLよりstrutsタグがいいと思っているヤツの気がしれん。
922 :
デフォルトの名無しさん :05/02/12 16:33:56
すいません。 validateエラー発生時の移動パスを可変にする事はできないのでしょうか? 通常<action>タグ内のinputで指定するパスを可変にしたいのです。 validateエラー発生時のinput移動パスを、フォーム入力の各ページによって page.jsp?id=1111 とか page.jsp?id=2222 にしたいのです。 ValidatorFormのvalidateメソッドをオーバーライドして、そこで ActionMapping#setInput()をしたら、ActionConfigは凍結されてるの エラーが出てしまいました。(T_T) フォームのvalidateエラー発生時のinput移動先を可変にする方法を 教えてくださいませ。
なぜ可変にしたいかのほうに興味がある。
>>922 何がしたいのかさっぱり意味不明すぎるけど、
そのActionFormでsetId/getIdメソッドを持てばいいだけじゃないの?
925 :
デフォルトの名無しさん :05/02/12 17:35:16
そんな・・・・ 例を出しますと、マルチスレッドの掲示板を作成してるのですが thre.jspでスレッドを表示しています。で、そのリクエストは thre.jsp?id=1111 の様にidのパラメータを付けています。 そのidで表示するスレッドを決めてる訳です。 で、そのthre.jspからの入力フォームが失敗したら、同じスレッドに 返したいのですが、<action input="thre.jsp">だとidパラメータの 指定ができず、元のスレッドに戻せないのです。 action inputのパスに可変パラメータを付ける方法を教えてください。 オーバーライドvalidate()内でrequestに属性を付加する方法も 考えたのですが、パラメータで指定したいのです。 誰かお願いします。
>>918 >>921 以下 JSTL で置き換えるとどんなの?
よくある一覧で編集するような画面。
JSTL だとすばらしくよくなるか?
[[[ JSP ]]]
<TABLE>
<logic:iterate id="row" name="HogeForm" property="rows">
<nested:root name="row">
<TR>
<TD><nested:write property="empId"/></TD>
<TD><nested:text property="empName"/></TD>
<TD><nested:checkbox property="empFlg"/></TD>
</TR>
</nested:root>
</logic:iterate>
</TABLE>}
[[[ Formクラス ]]] public class HogeForm extends ActionForm { private List rows = new ArrayList(); public Row getRows() { return rows; } public Row getRow(int index) { while (rows.size <= index) { rows.add(new Row()); } return (Row) rows.get(index); } //一覧の1行をあらわすインナークラス public static class Row { private String empId; private String empName; private String empFlg; //アクセッサ(ry } }
indexed が抜けてた。 <TD><nested:write property="empId" indexed="true"/></TD> <TD><nested:text property="empName" indexed="true"/></TD> <TD><nested:checkbox property="empFlg" indexed="true"/></TD>
>>925 Action#execute()で
ActionForward af = mapping.getInputForward();
return new ActionForward(af.path + "?id=" + id);
みたいにするのはだめなの?
どのみちAction#execute()でidを動的につけないといけないよね?
>>929 forwardのパスって、クエリ文字列OKだったっけ?
>>930 たしかAction#name.equals()で比較して判定していたような
いなかったような。
>>926 Strutsのしくみを使うためならStrutsのタグの方がいい。
>>932 logoc:iterateはStrutsのしくみなんか使ってないだろ
間違えた。logoc → logic
>>926 すばらしく良くはならないけど、JSTLでも同じ文字量で実現できる。
覚える事は少ないほうがよく、使うタグは共通してた方がいい。
>>925 Struts使っているのにthre.jsp?id=1111なんてするんじゃないよ。
クライアントからread.do?id=1111が来る。
Actionで1111のデータを読み込んで(thre.jspを使って)クライアントにデータを返す。
クライアントからwrite.doが来る。
OKならデータを書き込んで(thre.jspを使って)クライアントにデータを返す。
NGならinput="thre.jsp"で再表示。
ActionForm の中に、idを持つ。setId()/getId()
いや、Struts使っているからといって、リクエストパラメータ使ってはいけないわけじゃない。 って、JSPを直接呼び出すなってことか。 それなら同意。
>>932 Struts の仕組みを使うために Struts タグを使ってるわけじゃない。
こういうような、よくある一覧画面などで Struts の機能を一部放棄してまで
標準である JSTL 使ったほうが良いと思ってるのかを意見を聞きたい。
つーか、JSTL 薦める香具師は nested:iterate とか int 引数の getter とか
熟知してんの?あるいは薦めてんのは c:if とかそんなんだけ?
JSP2.0 の EL 直書きは便利そうだけど。ってか JSP の機能になるから
絶対使うけど。
940 :
デフォルトの名無しさん :05/02/13 00:04:09
>>939 別にstrutsタグを全否定してる訳じゃない。htmlタグの幾つかは使う事になる。
beanとlogicは使う必要がないな。nestedはhtmlに関連する時だけ使う。
それだけだよ。
ちなみに
>>926 は、JSTLでもほぼ同じ文字量でできる。
nestedなんて本当に使ってる奴いるんだ・・・・
>>939 なにを必死になってるのかわからないが、JSTLでできるならJSTLを使えと。
どこから「Strutsの機能を一部放棄してまで」という言葉がでてくるんだか。
すでにJSP2.0はリリースされてるし実装も安定してるから、ELは当然直書きできる前提。
古い環境使う前提があるなら、それは示してくれないと。
>>941 項目数が可変のときは、とりあえず使う。
>>940 なんとなく納得した。
で、
>>926 (
>>928 ) が同じ文字量でできるって、
出来る出来ないではなく、おまいの理想形で書いてみてくれ。
それか nested 使ってるから、理想系はあのままか?
>>942 それは正直すまんかった。既に JSP2.0 バンバン使ってるのか・・・
WebSphere の PJ を 2 つ掛け持ちしてるが、使ってない。
JSP2.0はいいでよ。 ちょっと使えば、中途半端なELの仕様が嫌になってくるけど。
JSTLはいいが、core、fmt、sql、xml 以外のサポートタグまで多用する ようになると、何の意味もなくなるからな。。。 それなら、素直にスクリプレット直書きした方がいいかもしれん。
coreとfmt以外はつかわんなぁ。 sqlとかは使うべきじゃないよね。 ColdFusionモドキがやりたかっただけかと。 xmlって使えるの?
struts VS. JSTL の前に JSPタグ VS. EL式。 <foo atter="<%=obj%>" /> というのが <foo "$obj" /> になるってのだけでも使う価値あると思うのだが プロジェクトというかweblogicがJSTLを許さないのが悲しい。 ="<= obj %>" って最高に汚らしい。
<jsp:expression>ニダー</jsp:expression>
foo.hoo.haaって書きゃいいんだから、nested使うメリットが思い浮かばん。 冗長になるだけじゃん。
nested:rootは使うべきじゃないな
>>952 nested の機能のほんの一部しか分かってないだろ?
以下、同じ処理だがどっちが冗長だ?
<logic:iterate id="rows" name="HogeForm" property="rows">
<bean:write name="rows" property="id" indexed="true"/>
<html:text name="rows" property="name" indexed="true"/>
<html:checkbox name="rows" property="flg" indexed="true"/>
</logic:iterate>
<nested:iterate property="rows">
<nested:write property="id"/>
<nested:text property="name"/>
<nested:checkbox property="flg"/>
</logic:iterate>
・あまり利用されておらず、タグそのもののバグの発見や修正が遅れがち ・使わなくても著しく不便な点もない などの理由で、非推奨にしようという議論がDev-MLで持ち上がっていたことがあったね。
議論が持ち上がって、そうなってないってことだろ。 議論だけ探すなら、いろんなところでいろんなものが非推奨にされかけてるよ。
んな事はない。 誰かが提言しても賛同を得られなきゃスルーされて議論にもならない。 strutsタグはhtmlだけだな。外は非推奨でいい。 俺はstruts自体を非推奨にしたい。俺が開発したフレームワーク 「YamamotoFM」を代わりに標準にしろと提言したい。
>>958 FMって何の略?FWの間違いじゃないよね?
>>959-960 ここまで英語感の無い香具師がいるとは・・・
FMは、FoundationModel の略に決まってるだろ。
こっちの方が自然な表現なんだよ。
プログラムするからには、最低限の英語感くらい身に付けた方がいい。
和製英語的ネーミングばかりしてるだろ。
>>958 非推奨への賛同が却下されるだけの、説得力のある必要性があったということだな。
> 俺が開発したフレームワーク
> 「YamamotoFM」を代わりに標準にしろと提言したい。
標準にするには、ちょっと名前がかわいくない。せめて萌えるイメージキャラクタが必要。
余力があれば、使える機能を実装してほしい。
>>961 ごめん、英語フランス語ロシア語は会話では不自由しない
和製英語はまずないけど、
理系にはわかりにくい古代フランス語風の名前は付けることが多い。
>>963 会話と技術用語は違うってことがいいたいのかな?
古代フランス語か・・・ つまり、フランス語が古代からあったと。 つまり、しったかかと。
なんかネタが多いぞ。もそっと真面目に語ろうぜ。
まあ、知らん人にはどうでもいいけど 今からだいたい1000年前の言葉 結構今の言葉と似ているからイメージとしてつかみやすい ギリシャ語はわけわからん、ラテン語は終わってる
>>967 つまり、1000年程度前を古代といったわけか。
つうことは、源氏物語は古代日本語で書かれてるわけだな。
で、それは Struts の良さとどう関連があるんだ?
なんか967が必死で泣けるが Old Frenchって言葉知らんの? 辞書とか見ることない人間か?
しらない。Old Frenchって書いてある辞書を見ることはない人間。 それにしても、古フランス語とか、古期フランス語ならわかるけど、古代っていうのはねぇ。 まるで古代に使われてるかのようだ。 理系なので、違う定義の言葉が混ざらないように気を使うけど、文系の人は気を使わないんだね。 勉強になったよ。 これで、いいStrutsアプリケーションが組めるってもんだ。
> 理系なので、違う定義の言葉が混ざらないように気を使うけど、文系の人は気を使わないんだね。 「古代」にも「古典」にも「古記」にも「old」を使う英語圏の人はみんな文系?
>>972 ん?
「古代」という日本語には「近世」の前の時代という定義もあるから、「近世」の後の時代を表すのに「古代」を使うとまぎらわしいという話をしたかっただけだが。
へんな理屈こねて必死になることなの?
古代 ・・・ ancient times 古典 ・・・ classic まあ、Old Frenchは知ってても、ancientやclassicは知らなかったってことか。
どうでもいいが、とりあえず「オレってメソッド名に古代フランス語風な名前つけちゃうんだぜ」って得意になってるやつがいるということはわかった。 Strutsでアプリ組むときには、そういうのにも注意しろってことだな。
>>954 って
>>950 のどこがおかしいん?
runtime expr がEL式でないとウザいってことでそ。
激しく外出かもしれませんが、 <bean:message>タグはJSTLでどう置き換えれば良いでしょうか?
<fmt:message>かな。よく知らん。
JSP使えないなら素直にVelocityに行っちゃってください。 半日あれば大抵の事はできるようになる。マジで。 ここはJSP教室じゃない。
>980 誰に言ってんだ? ここは精神病院じゃないぞ。
独り言言ってるからって精神病院送りするなよ
983 :
デフォルトの名無しさん :05/02/15 11:26:10
認証について質問があります。 一つのWEBアプリケーションに、ユーザ認証していないと表示できないページと、 誰でもアクセス・表示できるページがある場合、どのように認証処理を行えば良いのでしょうか? RequestProcessorを継承したクラスを作って、その中で処理を行おうとした場合、 誰でもアクセス・表示できるページでも認証処理が入ってしまいます。
>>983 <action rolres="a, b, c" />
> RequestProcessorを継承したクラスを作って、その中で処理を行おうとした場合、
> 誰でもアクセス・表示できるページでも認証処理が入ってしまいます。
それはおまえの実装が悪いだけ。
>>983 URLでアクセスの区別ができるなら、
Servletのフィルタを使うのが簡単。
>>984 さん、
>>985 さん
どうもありがとうございます。
どちらも大変参考になりました。状況に応じて使い分けたいと思います。