△△まだまだStrutsの良さを教えてくださいSession4
1 :
デフォルトの名無しさん :
05/02/27 09:44:12
2 :
デフォルトの名無しさん :05/02/27 09:46:11
4 :
使用した後に特許とか騒ぎ立てるあれですか? :05/02/27 17:21:11
5 :
デフォルトの名無しさん :05/02/27 19:32:30
PDFみるのかったるいので、要約きぼん
>>5 形容し難い。超要約すると.NETマンセーw
AはBであると考えられる。なぜならCだからだ。
という基本的な構造を持った文章が書けない人の
言う事は放っておけばよいと思う。
読まずに要約すると 「AだからBである。それとは関係ないがCである。そのためStrutsより.NET」 ということか?
>> 3 > 彼らは、Javaこそが正解であり、すべての企業システムはJ2EEで開発すべきだと考えています。 すごい妄想だな。
読んでみたら
>>7 のままだったのでワラタ。
しかし、1年半前の雑誌記事、いまさら持ち出してなにが言いたいんだろうね。
とりあえず、「穴がない」とか「Windowsプラットフォームに限定されるので 相性問題がない」とか断定しちゃっている辺りが非常に痛い。
Strutsに脅威を感じてるあたりも、今見れば笑える。 さすがに.netと張り合えるほどStruts単体はたいしたもんじゃないよ。
ところで,<nested:iterate> って,<nested:root> と同じ働きがあるんですね. これはすごく便利だ. 今まで全然知りませんでした.今見たら,前スレに少し載っていましたが.
>>13 <nested:iterate> は indexed="true" も付いてくる。
良くも悪くも、これ重要。
>>14 えー,そうなんだ.デフォルトで indexed='true' なのですか.
ではその<nested:iterate>の中で,<nested:text>とかを使いたいなら,
ActionFormBean には Collection を返す getter のみならず,int を引数に個別の
オブジェクトを返す getter も用意する必要があるのですね.
...よく考えてみたら,当たり前か.気が付かなかったけれど.
勉強になりました.ありがとうございます.
>>15 おまえ...元々分かってただろ。
<nested:iterate> はデザインの都合で <nested:text readonly="true"> とかすると
indexed="true" が付いてしまって submit 時に getter を探しにいってまう。
で、フォームに getRows(int):Row がなく getRow():List があると
IndexOutofBoundException かなんかで落ちてしまう。
<nested:iterate> で indexed="false" が指定できればいいが、
最新ではどうなんだろ。こんな書き方で回避したが他にやり方あるか知らんか?
<logic:iterate>
<nested:nest>
17 :
デフォルトの名無しさん :05/03/02 14:53:12
>>16 質問の返答じゃなくて申し訳ないんだけど,なんで index がついたらまずいの?
むしろ,無ければ,サブミットのときに,どの row から来たデータなのかを
指定できなくて困ると思うのだけど.
<nested> タグはどうも,バグがあるのではないだろうか? <nested:iterate id='b' property='a'> <nested:write property='c'> </nested:iterate> これは問題なく動いた.ちなみにこの外に<nested:root>で指定された Bean があり, a はそのプロパティ(型は Collection), b は Map. しかし,a の Collection を母体の Bean からはずし, request スコープに直接登録 して,以下のコードを試したが,エラーが出て動かない. <nested:iterate id='b' name='a'> (以下同じ) 結局,<nested>タグをやめて,以下のように通常のタグで書き直したら動いた. <logic:iterate id='b' name='a'> <bean:write name='b' property='c' /> </logic:iterate> Struts のバージョンは 1.2
>>18 とりあえず nested:iterate に id は不要
>>19 アドバイスありがとう.
しかし,<nested:iterate> から id 属性を除いても,やはり動かない.
エラーメッセージは,"name must not be null" なんだそれは.
通常のタグに戻すと動く.
ただ,うちのプロジェクトは,タグライブラリに若干手を入れている.
それが理由で,バグが発生したのかもしれない.
>20 >ただ,うちのプロジェクトは,タグライブラリに若干手を入れている. ならば質問する前にやることあるだろう。
22 :
デフォルトの名無しさん :05/03/08 13:07:51
StrutsとEJBの違いを教えてくださいー
なんだってー (AA略
25 :
デフォルトの名無しさん :05/03/09 09:54:52
StrutsとEJBの違いを教えてくださいー
Strutsは、Standard Testing Ritch User Transfer Systemの略で EJPは、Entity Java Beansの略。
29 :
デフォルトの名無しさん :05/03/10 13:55:44
昨日のCraigの講演より "Should NOT use Struts HTML tags" どうするよ藻前ら
なんだと
ViewがVelocityな俺は勝ち組
32 :
デフォルトの名無しさん :05/03/10 17:44:46
>>29 結局、strutsってのはなんなんだ。
後から非推奨になる機能が多すぎ。
つーかあの程度の機能の為に、変にこんがらがった実装をしてるし
あれが標準になるとはねぇ
>>29 >>32 それはJSFを使えってことだよ。今日、Craigに直接聞いてきた。
>>33 Craig は JSF のポトペタ環境まで面倒見てくれんくせに
勝手な香具師だな。企業の犬になったのか?
それか Craig がすばらしい IDE 提供するつもり?
そりゃー元々バカンスに行ったついでに適当に作ったフレームワークだから。 まさかこんなに世界中で使われるとは思ってなかっただろうよ。 Strutsの核は画面遷移コントロールと、データ受け渡し形式の定義であり ActionFormをインターフェースにして、POJOで云々みたいな発想も無かったんだよ、 そしてViewに関してはオマケ程度。 とりあえず基本的な事ができる程度にしか作ってなかった。
どっちにしろ、strutsは長くないね。 つーか今までが長すぎた。フツーならとっくに廃れてるはずなんだが。 あんなのがWebアプリの標準になりリファレンスや特集記事が出続けて たとは、Javaの世界って実はミーハーばかりなんじゃないか?
strutsは一言で言うと醜いフレームワークだからなぁ タグも気持ち悪いし、設定ファイルもクソ commons系のライブラリを生み出してくれたことには感謝するけど早く消えてほしいよ。
うーん。 そんなに言うほど酷くは無い気がするぞ。 つーか元々Strutsは、設定ファイルを分割しないと管理できないほど デカいシステムを想定してない感じがする。 ちっこいのを適当かつ簡単に作るのを想定した書式だな。 タグについても同様。 tilesなんかもう見てらんない。 引き時を誤った例。 commons系ライブラリの件については同意。 strutsの隆盛と共に、commonsも盛り上がった感がある。 beanutilsやvalidatorの様に汎用性の高い部分を共有するのは良いことだ。
>>33 Sunのイベントでも同じこと言ったのね、
あたしゃ「稚内大学なんちゃらかんちゃら」で聞いた。
>>34 CraigはStudioCreatorの開発にも顔出してるらしいね。
(あれがeclipseに勝てるかどうかは疑問だけど、ま、一度は
試してみようと思ってる。)
今年CraigがStrutsに死滅宣言を出したように
来年はLindaがHibernateに引導を渡すのでは?
って予感がしたよ。板違いスマソ
質問です. ForwardAction って,何のためにあるのでしょう? <action path='hoge' type='org.apache.struts.actions.ForwardAction' parameter='jsp/hoge.jsp /> 上のようなことを書くなら, <action path='hoge' forward='jsp/hoge.jsp' /> こう書けばすんでしまうと思うのですが.
>>41 アプリケーションをモジュール単位で分割した場合に、
その記述だとモジュール相対パスとして認識されてしまう。
ForwardActionを使うとモジュール相対パスではなく、コンテキスト相対パス
として解釈される。
>>42 ありがとうございました.
モジュール分割について知らなかったので,この機会に調べてみたところ,
おっしゃる意味は大体わかりました.
html タグは使うな,というのはなぜ?
ブラウザやWEBオーサリングツールで表示できないから?
それは確かにわかるのだけど,例えば <select> <option> はどう書くのだろう?
Velocity だとこんな感じになるようだけど,
http://d.hatena.ne.jp/wizardp/20050211 <select name="model.value[$num].select">
<option #if($action.getValue($num).select == "A") selected #end>A</option>
<option #if($action.getValue($num).select == "B") selected #end>B</option>
<option #if($action.getValue($num).select == "C") selected #end>C</option>
</select>
これじゃ cgi の世界に逆戻りじゃないか.
<html:select> <html:optionsCollection> がなんと便利なことかと思う.
Velocityで楽したきゃToolboxかVelomacro使うべ
>>44 > html タグは使うな,というのはなぜ?
JSFのUIコンポーネントを使えってことだとさ。
strutsのhtmlタグは標準技術ではないし、もうレガシーなものとして発展もしないということらしい。
標準UIが決められたんだからそれに準拠しる、って事か。 思想が健全でよろしい。
まー、JSF はまともに使える(ある程度枯れた) IDE が出て からだな。しかもその IDE が商用だけじゃ話にならん。 そもそも JSF は人間が手書き出来るものじゃないので (出来るが手書きなら JSF を使わんほうがいい) 既存の手書き仕様から単純に移行するものではない。 少なくとも数年は枯れてない IDE で初期工数がかさむのは確実。
>>45 Velocimacroですな。
まあ、その辺はカスタムタグみたいなもんか。
>>48 一理あるようで一理無いと思うぞ。
strutsタグやjstlタグを手書きしているのなら、やっていることは一緒だ。
無償のIDEがあるなら欲しいけどさ。
JSPへの表示は、htmlタグなしでもELでいけるが、 JSPからの入力を取るほうはどうすんの? 今さら request.getParameter("hoge")とか書くのはイヤ なんだけど。
>>51 JSFを使えって言ってんのがわからんのか
JSFを勉強してから、Struts-Facesを勉強して、それから出直してこい
これからの新規Web開発ベストプラクティス: JSFで逝くならJSFオンリーで。 Strutsで逝くなら、struts html タグを使わずに、 JSP2.0が使える環境→JSP2.0で JSP2.0が使えない環境→Velocityで
>>52-53 Struts-Facesはちょっと使えんよ。
Struts1.1ベースでほとんど表示オンリーならいいけどさ。
Shaleの開発始まっているからこれからStruts-Faces使い始めるつもりなら止めといた方がいいね。
BugFixぐらいはしてくれるみたいだけど。
(これからStrutsを勉強し始めるってのも賛成できない。)
俺としては、StrutsでいくならStrutsタグ使った方がいいだろうね。JSTL使ってもいいけど。
StrutsにVelocity併せて使うのはちょっと時代と逆行してる気がするな。
>>52-54 教えてクンなオレにレスありがとう。
あと2年くらいはstrutsかと勝手に思ってたんですが、
個人的にJSFの勉強始めてみます。
でも、新規の業務をJSF1色で作るのはまだなんか
怖い気が(これは、勉強して「素晴らしい」と思えれば
杞憂に終わるか?)。
外注も、struts使えることは抑えてるけど、JSFはどうだろう…
>>55 Shaleのソース見てから言ってる?まだまだ全然使い物にならんよ。
開発が始まってるって?Craigがproposalとして第一段階のソースを
コミットしたにすぎない。他のメンバーはまだ手を付けていない。
Craigも今年の6月のJavaOneでEAのサンプル程度の物が提供できれば、なんて
言ってたぐらい。(ちなみに、Craigのこの手の発言は半年延びることはザラにある。)
Shaleは"Struts"という名前はついているが、互換性ゼロのまったくの別物。
どちらかというとJSFベースのフレームワーク。
とは言ってもStruts-Facesは独自タグだらけでかなり無理矢理な印象。
こちらについてもCraigは、StrutsからJSFへの移行をするためのMigration Toolとして
積極的に開発を進めていく、と言っていた。
「これからStrutsを勉強し始めるってのも賛成できない」はあと2年経ったら
そういえる状況になるとは思うけど、今はまだこれから勉強してもいい時期だとは思うよ
>>57 もちろんソース見てるよ。Shaleの使い方のWeb立てたいぐらい。
validator対応とコントローラの改良を早くして欲しいね。
Struts-Facesも調べたけど、JSTLとJSFの勉強をかねてやるにはいいけど
じゃあStruts本体はっていうとstruts-config.xmlでAction振り分けるぐらいじゃん。
ActionFormをマネージドビーンとして登録するってのもなんだし、
Struts使うのかどうかってのは、コントローラ部分をstruts-config.xmlでするのか
faces-config.xmlでするのかぐらいのもんだろ。ちょっと大げさに言えばさ。
そんな状態で本屋でStruts1.2対応とかいっている入門書並んでるのみてるとさ、
今からStruts覚えようとかいうやつにはちょっとまてと言いたいんだよ。
お前の言うように2ヶ月かけてStruts覚えるんなら、validatorとかchainとかjsfと
かjstlとか覚えとけよって思う。
そのうえこれからStruts覚えますってやつにStrutsFacesまで覚えろっていうのは
ちょっとナンセンス。
でも、今のスタンダードとしてstrutsの技術を知っておいた方がいいとは思うんだけどな。
もともとJSFはWebでイベントドリブンしようぜという発想なんだから、Struts
などの今までの方式とは合わないんだって。
StrutsするならとことんStrutsやったほうがいい。だからStrutsFacesはお奨めできない。
それにCraigがStrutsからJSFへの移行はStrutsFacesでうんぬんとかいうのはShale以前の話だろ?
59 :
デフォルトの名無しさん :05/03/13 16:41:43
> それにCraigがStrutsからJSFへの移行はStrutsFacesでうんぬんとかいうのはShale以前の話だろ? 昨日言ってた。
ごめん、おとといの間違い
>>59 そりゃすまんかった。
その要約どっかで見れないかな?
62 :
デフォルトの名無しさん :05/03/13 17:11:13
>>48 jsfが手書きできるのものじゃないって釣りなのか?
それとも想像で言ってる?
>>55 Velocity→JSP2.0は意外と移行がかんたん。
JSP2.0 <input type="text" name="aField" value="${aForm.aField}">
Velocityでも <input type="text" name="aField" value="${aForm.aField}">と書ける。
ま普通は
<input type="text" name="aField" value="$!aForm.aField">
かもしれないが。
strutsタグからのほうが移行の敷居が高い。
Craigの話でも
テーゼ:JSP1.n+拡張タグ(JSTL,Strutsタグ含む)
↓
アンチテーゼ:Velocity,FreeMakerなどのテンプレートエンジン
↓
ジンテーゼ:よりテンプレートライクなJSP2.0
とアウフヘーベンしていたようだった。
Java WorldでもJSP2.0を「テンプレートエンジン」扱いしてたし。
短期見通しで上げられていたJSF2.0&JSP2.1の統合を考えると、
移行期にある現在、学習コストの低い&コンテナVer.を選ばないVelocityをつなぎ
として使うのは意味があると思うよ。
JSP2.0の式言語でサニタイズってどーやるのがいいんだ? Velociteyでは書き出しをハンドリングして自動でやらせてるけど
Strutsサイトの ロードマップとかマイルストーンとか更新されてた。 1.2で最後かと思ってたけど1.3も出そうだな。 ところでChainを本格的に導入するとどうなるんだ? 今までのActionがなくなって、Chainのコマンドとして実装するのかな。 だったらstruts-config.xmlでやっていたナビゲートもChain用のコンフィグ として記述するようになるから、Strutsとは名ばかりのまったく別物になる 気がするんだけど、既存資産を生かすのが目的だろうか? iBatisがどうのこうのっていうのもよく分からん。 だれか解説して。
>>63 間違えられやすいが、
×FreeMaker ○FreeMarker
ちなみに、FreeMarkerの開発者はVelocityのMLを荒らしたことがある。
すみませんが,質問です. <html:multibox property='id'>を Validator で検証するにはどうしたら 良いでしょうか? 受け手には public void setId(String[] id); が必要になるのですが, これの入力を検証する方法がわからないのです. チェックしたい項目は, ・セットされた配列の文字列は,すべて「整数」でなければならない. ・要素数は1以上(こちらはそれほど必要でありません). もしかして,これは Validator では無理で,validate() メソッドを 手で書かなければならないのでしょうか?
>>68 意味不明だな。
> ・セットされた配列の文字列は,すべて「整数」でなければならない.
なぜこれをValidatorで検証しなければならないのか?
>Validator では無理で,validate() メソッドを手で書かなければならない
どんな検証でも、Validatorでは無理でvalidatoe()メソッドを手で書かなければならない
ものなど無いと思う。標準で用意されているルールで要件を満たせなければルールを作ればよい。
幻想だな
>>69 すみません.我ながら意味不明でした.
標準の validator-rules.xml 内の定義で済ませられないか,というつもり
でした.
今回は,<html:multibox>を使っている ActionForm が一つしかなかったので,
validate() メソッドで済ませることにしました.
もし,この validation をほかでも使うことになったら,新しいルールに
昇格させるつもりです.
ありがとうございました.
72 :
デフォルトの名無しさん :05/03/20 08:46:19
Strutsのスレッドセーフに関する質問です。
googleで"スレッドセーフ Struts"でしらべました。
ttp://www.atmarkit.co.jp/fjava/rensai2/webopt04/webopt04.html @ITで調べたところ、結論としては、
"クラス変数や、Servletのインスタンス変数については、
設計段階から使わないようにするなど規約化を行ってから開発すること"
と結んでいます。しかし、マルチスレッドではServletのインスタンス変数
も危険であるとの記述もあり、結局なにをすべきかわからない状態です。
(シングルスレッドについての記述もありますが、パフォーマンスが落ちる
との記述もあり、さらに混乱します。)
今回、SOFTBANKPublishingの『Apache Strutsハンドブック』黒住幸光著
も参考にしましたが、結局Strutsで何をすれば、スレッドセーフになるのか
わからなかったため、ご教授願います。よろしくお願いいたします。
--------以下上記書籍引用--------------------
Actionクラスに限らず、すべてのアクションのインスタンスは
複数のスレッドで共有されます。複数のHTTPリクエストが同時に
同じアクションを実行した場合、両者は同じアクションのインスタンス
をアクセスしていることになるので、実装上注意が必要です。
アクションを創る場合には必ずスレッドセーフなクラスとして作成
してください。
は? インスタンス変数を使わないとか、Springで管理してリクエストごとにオブジェクト生成させるとか。
72です。
>>73 様
レスありがとうございます。
具体的には@ITの下記の記事に、インスタンス変数すら
危険であるという記述があるため困っているのです。
結局は、シングルスレッド化しなければならないのでしょうか、、。
(シングルスレッド化はパフォーマンスに問題があるそうですが。)
---------@IT引用--------------------
インスタンス変数にも注意せよ
インスタンス変数といってもいろいろあるが、ここで話題にするのは
ServletやJSPのインスタンス変数である。
まずは実際にあったソースコードを紹介しよう。
この例では、マルチスレッドモデルでServletを動作させていたため、
スレッド間でインスタンス変数paramが共有され問題となったのである。
アクションやServletの中でインスタンス変数を使わなきゃいいだけじゃないの? つーか継承して特定メソッドを書くだけだからふつー使わないし
だ・か・ら〜 インスタンス変数は使うな!そのまんまなんだよ。 ローカル変数のみを使え。
>>74 Springで管理してリクエストごとにオブジェクト生成させるとか。
>>75 >>76 様 ありがとうございます。
>>74 様 Springについては別途調査します。ありがとうございます。
インスタンス変数というのがいまひとつ理解できなかったので、
ご迷惑をおかけしております。
(staticでないものがすべてインスタンス変数であると考えていたため。)
結局のところ、下記のとおりでよろしいでしょうか?
よろしくお願いいたします。m(__)m
import xxx;
public final class XXXX extends Action {
//ここで変数宣言することはないですが、
//ここだと危険だということですか?(最終確認)
public ActionForward execute (ActionMapping map,
ActionForm frm,
HttpServletRequest request,
HttpServletResponse response) {
//ここに処理をかけば問題はないですか?
//実際の処理は、他のクラスをここでインスタンス化し、
//処理を委譲します。(最終確認)
return map.findForward("xxx");
}
}
ローカル変数のこともインスタンス変数だと思ってたわけか? 「ここに処理を書けば」って、他にどこに書くんだ? さきにインスタンス変数について調べれ。
>>79 様 ありがとうございます。
おはずかしながら、変数は、クラス変数(static)と
インスタンス変数(クラス変数以外の変数)であるとおもっておりました。
そのうえ、メソッドについてもクラスメソッド(static)と
インスタンスメソッド(クラスメソッド以外)であると、、。
そして、インスタンスメソッド内で定義された変数は
すべてインスタンス変数であると誤解しておりました。
(=これはローカル変数と呼ばれるものなのですね?)
>「ここに処理を書けば」って、他にどこに書くんだ?
ここしかないですよね。。ここにしか通常は書かないことから、
SOFTBANKPublishingの『Apache Strutsハンドブック』黒住幸光著
をよんで、悩んでしまった理由です。
丁寧に皆様ありがとうございます。
書き忘れました。
インスタンスメソッドについては、インターネットで
もう一度、勉強してみます。ありがとうございます。
>>79 様
うむ。 こんな恥ずかしいこと、リアルの世界で指摘されなくてよかったな。
>>82 様
まったく、そのとおりです。勉強します。
みなさまありががとうございました。m(__)m
84 :
デフォルトの名無しさん :05/03/20 20:59:43
標準たるJSFが出た以上、今更Strutsでも無いだろうに。
Strutsはいつまでも標準フレームワークであり続けるだろう JSFは専用のIDEが出るまでは普及しない。 Strutsを否定するものは
標準に従わず独自仕様に固執…Microsoft的だな
87 :
デフォルトの名無しさん :2005/03/21(月) 17:58:58
質問があります・・。 【質問1】 最終的にやりたいことは、以下のコードをJSTLで書き直すことです。 <html:form action="/FormAction"> <table> <tr><th>ユーザID:</th><td><html:text property="id" /></td></tr> <tr><th>名前:</th><td><html:text property="name" /></td></tr> <tr><td><html:submit property="submit" value="実行" /></td></tr> </table> </html:form> しかし、<html:form action="/FormAction">を<form action="/FormAction" method="POST"> として同様にかきますと、/FormAction がないとか怒られます。 【質問2】 これは Strutsで書いたコードがどのようなJSPに展開されているか自分がよくわかっていないためと 思いました。どのようなコードに展開されるかはStrutsのどの部分を見ればわかりますでしょうか。 教えてくださいませ・・。
>>87 【質問1】だけ。
<form action="飛ばすJSPページのURL">
<table>
<tr><th>ユーザID:</th><td><input type="text" name="id" /></td></tr>
<tr><th>名前:</th><td><input type="text" name="name" /></td></tr>
<tr><td><input type="submit" name="submit" value="実行" /></td></tr>
</table>
</form>
受ける方のJSPページでは、${param.id} や ${param.name} でパラメータが見えます。
なお、<form method="post" にして、
表示するときは <c:out>タグや fn:escapeXml()関数 を使うのが安全です。
89 :
87 :2005/03/21(月) 18:34:21
>>88 速い!ありがとうございます!
説明がちょっと言葉たらずだったのかもしれません。
JSPのページに飛ばしたいのではなく、struts-config.xml を介して、FormAction.javaに
飛ばしたいのでした。以下はstruts-config.xmlの一部抜粋。
<action-mappings>
<action path="/FormAction" type="hoge.FormAction">
<forward name="success" path="/result.jsp"/>
</action>
</action-mappings>
Strutsのhtmlタグを使えば問題ないのですが、先程のように書き直すと、
HTTPステータス 404 - /FormAction
The requested resource (/FormAction) is not available.
と言われてしまうんですよね・・。
>>89 strutsタグで書いて実行してHTMLソース見れば解決。
92 :
89 :2005/03/21(月) 21:48:15
>>90 それはやってみたんですけど do つけない場合と同じ結果でした・・。
>>91 ありがとうございます!!それがまさにほしかった答えでした。
皆さんわざわざショボい問いに答えてくださってありがとうございました。
すみませんが,質問です. Struts 実行中のカレントディレクトリはどこなのでしょうか? Velocity の設定で, file.resource.loader.path の指定を,カレントディレクトリに対する 相対パスにしたいのです. 開発機 (Windows) と本番機 (Linux) とで,絶対パスが違いますので.
>>93 Strutsを実行してるコンテナに聞け。
95 :
93 :2005/03/24(木) 21:58:33
とりあえず,カレントディレクトリはまだ分かりませんが, velocity.properties には相対ディレクトリだけを保持させて, Velocity.init() 後にVelocity.setProperty() で getRealPath() を 元の設定値に加えることで解決しました.
しかし、WebアプリでVelocity使ってるときにカレントディレクトリがどこかって必要か? ってか、Struts関係ねぇし。
教えてください。 クライアント側に一部Flashを使う部分があって、このFlashコンテンツとの間で データのやり取りをしなければいけないんですが、strutsを使ってる場合 Flashにデータを返す仕組みってどうすればいいんでしょう? 生Servletみたいに、outputのstreamに直接レスポンスのデータを返す事はできないですよね? もしくは、普通にforwardさせて、そのforwardさせたJSPの中に 戻したいデータをダンプするコードを書けばいいんですかね? struts-config: <forward name="success" path="toFlash.jsp"/> toFlash.jsp: <% String resData = (String)request.getAttribute("xmlResponse"); %> <%=resData%> もし、ご存知の方がいらっしゃいましたら、ご教授お願いします。
いまの私がいるプロジェクトでは、「Strutsタグはもう古いので使用しない」らしくて、 JSPが <input type="text" value="<c:out .....................>"> とかみたいに大変なことになってるんですが、最近はこれが普通なんですか?
たしかにStrutsタグはもう古いのでJSTLが使えるところはJSTLを使うのだけど、フォームやメッセージ関係はStrutsタグ使うよ。 それに、Strutsタグはもう古いというのなら、JSP2の式言語も使わないと。 <input type="text" value="${...}"> だな。
>>99 あのな、それだとサニタイジングされないんだよ。
だから、
>>98 のやり方を使うのが普通。
<input type="text" value="<c:out value="${...}">">
>>100 それならおとなしくhtml:text使った方がいいと思うが。
どっちにしろ、自分のまわりだけで使ってることを普通と思うのはよくないと思うよ。
ようするに「古いから」という理由で使用しないことを決めるやつがアフォ。 もっと便利なものがあるからとか、デメリットがあるからということで使用しないことを決めるべきだ。
Velocityみたいに式言語で書き出すときにエスケープする方法ないのかしら?
ないね。欲しいね。というか必要だよね。
>>97 Flash(ActionScript)側の話になるから完全にスレ違いだと思うが、
Flash側でloadVariables(
ttp:// 〜/foo.do?param=bar)とかLoadVars.load()とか
ちゃんとやるならXML.load()とか呼んで、
Struts側はtext/plainなりapplication/xmlなりで単純にデータを吐くようにするだけじゃね?
あとFlash起動時にパラメータ渡すなら、<object ..>タグの中にflashVarsパラメータセットするか。
どっちにせよActionScriptのヘルプを参照のこと。
てかここで聞く前にFlashプログラマとコミュニケーション取れ。
>>105 レスさんくす。でも、やっぱり意図が伝わってない・・・すまん。
聞きたかったのは、ブラウザじゃないクライアント(Flash)からリクエストを
受け取ったstrutsを使っているApServerは、どうやってレスポンスを返すのが
一般的なのかな?と、言うのが聞きたかったとkろなんです。
例えば、
>>97 に書いたように、普通のブラウザに返す仕組みと同様に、
JSPにforwardして、そのJSPの中で、返却したいデータを書き出すのが普通?
それとも、Actionのexecuteの中で直接outputstreamかなんかに書き出して、
flashへレスポンスを返して、forward先はdummy(空)のJSPだったりとか?
「俺のところはこうやってるよ」、「こうすればできるよ」などが聞けたらありがたいと
思ってます。
普通にswfが要求する文字列をActionから吐き出して、execute()はnullを返せばいいんでないの?
>>106 あー、そりゃこちらの言葉が足りなかったかもしれん。
>Struts側はtext/plainなりapplication/xmlなりで単純にデータを吐く
は、 普通にforwardしてforward先のJSPで出力すればいいと言いたかった。
つまり、
>>97 で言う後者だ。
一般的かどうかは知らんが「俺のところはこうやってるよ」。
せっかくStrut使うんならStrutsタグ使うとすると
--XXX.jsp----
<%@page contentType="text/plain"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
title=<bean:write name="xmlResponse" value="title" />&name=<bean:write name="xmlResponse" value="name" />&...
-------------
て感じで。
上記ぐらいのプレーンデータじゃStruts通さず吐いたほうが早いかもしれんが、
ループありありなXMLをがっつり構築するとかになるとメリットが出てくる。
>>107-109 みなさん、ありがとさんです。
レスもらった3つの方法で、考えてみます。
たぶん、
>>109 の
>ループありありなXMLをがっつり構築するとかになるとメリットが出てくる。
が、こちらもたくさんありそうなので、この方法を採用しそうな気配。
つたない日本語&読解力ですまん。
ありがとうございました。
普通にWebサービスかなんかでやるのが手軽なんじゃねぇの?
112 :
デフォルトの名無しさん :2005/03/29(火) 22:52:48
すいません。 strutsのサイトで、サンプルソースってどっから見ればいいですか? strutsでファイルのアップロードに関するソースはそこにあると 聞いたんですが見つけきれなくて。
113 :
112 :2005/03/29(火) 23:06:48
自己レス。 バイナリファイルから解凍すればでてくるのね…スマソ。
114 :
デフォルトの名無しさん :2005/03/31(木) 17:59:15
struts今度初めて使おうと思ってるんですが、 eclipseのプラグインって1.2対応のやつ、ないんですね。
1.2の新機能を使うまでもない。
116 :
デフォルトの名無しさん :2005/04/03(日) 14:47:12
スイマセンStrutsの設計について質問なんですが 入力文字のチェックはFormでvalidateします が、入力項目のDB存在チェックはFormにvalidateさせるか アクションにやらせるかで迷っています システム屋というかPG側の人間は「アクションでやれ」という方が多いと思いますが 客側ユーザ側からみれば、さっきはエラー表示していなかったのに なぜ急に「存在しないコードです」などと出てくるんだ?最初からエラーは全部表示しろ となります 作り方としてはFormで入力チェックしてエラーがあろうがなかろうがアクションに制御移る アクションでDBチェック後、ここで入力エラーがあるなら遷移元に返す でもそんなことやるんだったら、FormでDB呼び出してvalidateしたほうがいいと思うんだけど
DB存在チェックっていうのがどういうものかによって変わってくると思う DBに入れているかいないかにかかわらず、選択肢に限りがあるものはそれ以外が選択できないように画面設計するのがベスト。 例えば性別、都道府県、部署、とかそういうたぐいのもの。 逆に数千件以上あるような商品コード(商品マスタ)、顧客コード(顧客マスタ)とかの指定はDB検索して「存在しません」と表示させるのがベスト。 あとは、エラーとなったときにどこに表示させるか(例えば入力画面にもどってとか)、どういうエラーメッセージを表示させるかというユーザインターフェイスの設計の能力が問われる。
118 :
デフォルトの名無しさん :2005/04/03(日) 16:31:59
期待している答えが違う
> システム屋というかPG側の人間は「アクションでやれ」という方が多いと思いますが > 客側ユーザ側からみれば、さっきはエラー表示していなかったのに > なぜ急に「存在しないコードです」などと出てくるんだ?最初からエラーは全部表示しろ > となります アクションでやって、客側から最初からエラーが全部表示できるようにすればいい。
>>119 なんだ、ただ茶化しているだけか。
どういう意味かまじめに考えちまった。
まじめに考えてもわからなかったから、茶化してることにして自分を納得させるしかなかったというわけか。
122 :
デフォルトの名無しさん :2005/04/04(月) 00:52:38
ちなみに質問者は俺 120は別人
ま、プログラマの信念がユーザーインターフェイスに悪影響を与えることはあってはいけない。 そんな信念は必要ない。
>>118 ,120,122
まともな回答が理解できないのは君の能力のなさが原因だよ
125 :
デフォルトの名無しさん :2005/04/05(火) 00:25:20
すみません!! 教えてください!! JSP⇒Action⇒Action⇒JSPと遷移させてるのですが、 二つのActionが同じActionFormで定義されている場合、 前ActionでActionFormのプロパティにセットしたものを、 後Actionでゲットしても、反映されないのでしょうか? 今日、それに気づいたのですが・・・どなたか反映されない 理由をご教授ください!!
126 :
125 :2005/04/05(火) 00:29:51
JSPでは、Action@の処理により、ActionFormの値をそのまま 表示させています。 JSPのサブミットで、ActionAに飛びます。 ActionAでActionFormのプロパティの値をすべて""にしています。 そして次のActionBで元のJSPに遷移します。 という流れでJSPのinput等の値がクリアされるかと思ったのですが そうじゃないみたいなんです・・・。 Strutsは詳しくなくってすみません。
>>125 ActionFormのスコープによる。
それから、インターネットで機種依存文字は使うな。
およそプログラマのやることとは思えないな。
OS・ブラウザを限定すれば問題ない
まあ2chで言うことじゃないけどね。
2chで機種依存文字を注意する猛者、何年ぶりだろうか。
ドコモの絵文字などはともかく、需要のある文字をいつまでも対応しない 怠慢なOSに好感を持てませんね。別に拡張できないわけじゃないし。 ○数字はともかくローマ数字が使えないと、検索その他いろいろ不便だよね。
ルパンV世はぐぐれないね。
133 :
デフォルトの名無しさん :2005/04/05(火) 13:02:33
>>116 どっちがいいか悩んでるのなら
クライアントである客の意見にするべきだと思うが。
134 :
デフォルトの名無しさん :2005/04/06(水) 22:39:34
>>124 117は明らかに期待している答えと違う
>DB存在チェックっていうのがどういうものかによって変わってくると思う
>DBに入れているかいないかにかかわらず、選択肢に限りがあるものはそれ以外が選択できないように画面設計するのがベスト。
>逆に数千件以上あるような商品コード(商品マスタ)、顧客コード(顧客マスタ)とかの指定はDB検索して「存在しません」と表示させるのがベスト。
だから、「存在しません」と表示させると、自分は言っている
>>133 いやだから、客の要求にこたえる前提で
DBチェックをどこ(FormかActionか)でやらせますか?と言う話なのです
通常のテキストチェックはFormでやります
そこでエラーになったら遷移元に戻ります
で、「DBの存在チェックはFormでやるのはおかしいですか?」ということをききたかったのです。
>>134 >「DBの存在チェックはFormでやるのはおかしいですか?
おかしい。それは業務ロジック。モデル層でやるべき。
136 :
デフォルトの名無しさん :2005/04/06(水) 23:15:22
>>135 そう、そうなったときに メッセージセットして return "input_error";//入力画面に戻る遷移先用意する にするのがいいってことですか? 「おかしい」というのは「それが業務ロジック」だからと言う理由ですね? 逆に「(広い意味で)入力チェックロジック」と考えた場合、Actionでやるのもおかしいと思いませんか? Formで入力チェックし、その結果に関わらずActionに処理を移すと言う書き方になり、それもそれでおかしいと思う DBアクセス=業務ロジックと考えるべきか 機能として処理の書く場所を決めるべきか
137 :
デフォルトの名無しさん :2005/04/06(水) 23:20:05
続き 私はDBチェックがModelとして単体のクラスとなっているのであれば Formから呼んでもかまわないと思います ただ、たしかvalidateメソッドはExceptionをthrowするメソッドではないので(ちょっと思い出せないが) DBエラーがあった場合にvalidateのなかで解決しなければならず、これもどうかとは思いますが
RuntimeException投げればよいかと。
validate()でcatchして、ActionErrorを作って、戻り値のActionErrorsにadd()するのがいいんじゃね?
>>137 最初からエラーを全部表示したいのであれば、validateでエラーをセッションに保存して、
ActionでDB接続もすればよいのでは?自分もFormでDB接続はしたくないですね。
>>138 本気で言ってますか?
141 :
140 :2005/04/07(木) 13:44:55
追記 ただ、DB接続はコストがかかるので、単純な入力チェックが完了した段階で 行うべきだと思います。つまりユーザには2段階でエラーが表示されると納得してもらう。
で、DBの存在チェックというのが実は 1.乙女座 2.蠍座 ・・・ で、1から12までの数字を入れてください。っていうようなものだったりする罠。 13を入れると存在しませんと表示される。 入力文字のチェックはFormでvalidateしますが、 DB接続はコストがかかるので・・・・ 最初から出せよって。
へびつかい座が追加されるかもしれないじゃないか
>>140 DBエラーが出たらログ吐いて「ただいま混みあってます」を表示するくらいしかないだろ。
RuntimeExceptionに変換してコンテナに処理させればいい。
>>142 コンボボックスでやれ。
それか、値が詰まってるなら範囲チェックだけで充分かと。
146 :
140 :2005/04/08(金) 15:43:53
>>144 業務ロジックでRuntimeExceptionをスローするなんて
正しい例外処理だと思ってる?
147 :
デフォルトの名無しさん :2005/04/08(金) 17:36:08
>>146 君の意見を聞いてると、
formでやりたいんだけど普通ではあまりしないのは知ってる。
だから誰かに「いいんじゃない?」といって欲しい、そう聞こえる。
そう思ってるのなら、formでもいいんじゃねの?とは思う。
148 :
140 :2005/04/08(金) 17:52:18
>>147 えっと、私は元の質問者じゃないですよ。念のため。
私が書いたのは140、141、146のみ。
>だから誰かに「いいんじゃない?」といって欲しい、そう聞こえる。
ここの意味が分からないのですが。「いいんじゃない?」というのは何に対して?
ちなみに業務でstruts使ったことありません。だから
>formでやりたいんだけど普通ではあまりしないのは知ってる。
も不明なのですが、普通はどうやるのですか?
結論:これからはJSF
JSFは使えるレベルのものはあるのか? Strutsはダサいからあまり使いたくないんだけど
JSFは標準仕様だけじゃ全然機能が足りないよね。 今JSFを使うなら、ベンダー独自実装の機能をバリバリ使うしかない。
JSFはビュー周りのものだから、強力なコントローラで融合してくれるようなフレームワーク欲しい
そこでJPF@WebLogic Workshopですよ。
BeehiveってTOMCATで動いた実績あるの?
>>153 ユーザインターフェイス(ビュー)関連は画期的といえるほど便利になった。
Webとかいうことを気にすることなくイベントドリブン的なプログラミング形式になった点は非常に満足。
151がいうような点はSUNのRIならそうだけど、MyFacesとかに切り替えればいいだけ。
たまたまネットで見かけたけど、普通のGUIの部品(Bean)のように有償無償のそういう市場もある。
JSF用のtaglibもフリーソフト的なものもちらほらあるし、レンダラもスキンのように好きなのに切り替えてというようになるだろう。
だけど、JSFの目的からすればそれは当然の事なんだけど、Strutsと比べてしまうとコントローラ部分がまったくない。
今までWeb開発とかでStrutsのようにコントローラ部分のフレームワークがあったからやっぱりそれと比べてしまうと、そこに当たる部分が(Strutsに変わる部分が)ほしいんだけど、
いまのところJSFとうまく融合できているのがない気がする。
俺が知らないだけかもしれないけどさ。
Struts1.xとの組み合わせは統一感がないので違和感感じる。全然方向性が違うのを無理してつないでいるからね。
かといってShaleがまだまだベータも出そうにない。
ShaleにSpring組み込むとかいう話だけど、(SpringにJSFとかStrutsにJSFとか逆じゃなくて、)まだ形にすらなってない。
こういう点がJSFやるうえで不満。
あと、金のない俺からすれば、開発環境でGUIがない点が不満。
EclipseのVisualEditorのようなものが出てきてくれたらうれしいんだけどさ。
やっぱfaces-config.xmlはある程度の規模になってくるといちいち書いてらんない。
プログラマが直接いじるんじゃなくて、GUIの開発ツールで勝手に自動編集されることを前提としているだろうからね。
> あと、金のない俺からすれば、開発環境でGUIがない点が不満。 JSFのメリットを生かし切れてないので悔しいけど、 視点を変えれば、この点に関してはStruts使ってもJSF使っても同じでしょ。 faces-config.xmlを書くのがstruts-config.xmlを書くよりも大変だとは思わないし。 ベンダ依存の機能を使いたくない、とか金がないのから Shaleが育つのを待ちながらStrutsを使うのがいいんじゃないかな。
社会人と趣味人がはっきり分かれてると思われ。 仕事でやってるならならそう易々と新しい開発環境や新技術なんて使わんわけで。恐ろしい。 無職の奴は、将来のために役にたつ物をとか考えるんだろうな。 今実績をあげていった先にしか、将来なんてないのにさ(・∀・)ニヤニヤ
> 将来のために役にたつ物をとか考えるんだろうな。 社会人でも、今の業務でいっぱいいっぱいで先の技術に目を向けない奴はダメダメだけどね。
>>160 同意。10年後か20年後、今のCOBOLerと同じようになっちゃうね。
やがてXMLデータサーバ+SWT(JavaWebStart)クライアントになるから、 Strutsは消えるよ!
使わないからといって評価もしないのは、社会人というより社蓄だな。
>>159 ごめんね、お母さんはじめてだからよくわかんなくて。
何で「今実績を上げる」と「将来のために役にたつ物をとか考える」の2者択一なの?
両方いっぺんに出来ないの?
Flex+Strutsはよさげ。
>>159 俺の知っているダメなやつも同じこといってるね。
パッチあてるのでも恐ろしい。バージョンアップも恐ろしい。
ど素人ならわかるけど、システム部門の人間がだよ。
自分が知らないものはなんであれ恐ろしいのは当然だ。
人間は歩みを止めたらそこで終わりなんだ。
本当に恐ろしいのは知ろうとしないことなんじゃないのかな。
テストもせずに人の話だけ鵜呑みにして顧客のシステムをいきなりバージョンアップしようとするヤツは恐ろしすぎ
でも、この話の流れとは関係ないね。
そういうなよ
ま、そろそろスレ違いぎみだな。
>>159 あたりは、みんながひととおりノウハウためて落ち着いてきたころにノウハウなしに導入すればいいってだけのことだな。
173 :
デフォルトの名無しさん :2005/04/12(火) 11:35:47
JSFの隠れたメリットは managed-bean限定ではあるがsetterInjectionを採用したDIコンテナ、っつーことだ。 POJOで書ける。 strutsみたいにres/reqを引数に取る義務はねぇし、method名も強制されない。 res/reqは必要な時だけcontextに問い合わせすればよい。 例えJSFが時代遅れになってもmanaged-beanは再利用可能だ。 現在出回ってるJSF教科書のソースは、setterInjectionを利用しない汚いソースが 多いが、マネすべきではないと思っている。
>>173 別に隠れてるわけじゃないが・・・
Strutsと比較したときの大きなアドバンテージだと思うよ
>>173 StrutsShaleのusecaseデモで使われているよね
>>172 がStrutsのノウハウを溜めた頃には、廃れている罠。
177 :
173 :2005/04/14(木) 13:44:28
オレは既にJSFに主軸を移しちまっているんで何も知らないのだけど・・・ ShaleもDIになるの? 既存のStrutsTaglibがそのまま使えるWebDIコンテナってイメージで合ってる? 差し替えリゾルバを使えばJSF-Shale間で相互にbeanを参照できるとか? 知ってる人情報くさい。
>>177 > 既存のStrutsTaglibがそのまま使えるWebDIコンテナってイメージで合ってる?
ちがう。
ShaleはStrutsという名前は付いているが、既存のStrutsからは何も引き継いでいない。
JSF + Commons Chain ベースのフレームワーク。
当然、ViewはJSFだ。
現状のShaleのコードでは、JSFのconfigファイルとChainのconfigファイルの両方がアプリ中に存在している。
JSFだけじゃコントローラ機能が足りないからそこを補うフレームワークといえる。
180 :
デフォルトの名無しさん :2005/04/14(木) 15:20:29
ちょいとおせぇてください。 対象となるWebアプリが、 ・DBから引いた情報を、テーブル構造で一覧化表示して、その内部には UIとなるフォーム部品(コンボボックスとかチェックボックスとかテキストフィールドとか)が 多数配置される ・それらフォーム部品をハンドリングするためのJavaScriptを動的に?生成する必要がある みたいな機能の場合、Strutsの採用は向いてるんでしょうか? それとも他にmore betterなフレームワークあります? 個人的には、いっそOGNL直撃&自前HTMLパーサでやるのも手かなとか感じちゃってます。。。orz
181 :
デフォルトの名無しさん :2005/04/14(木) 15:23:43
182 :
デフォルトの名無しさん :2005/04/14(木) 18:30:01
strutsってDB周辺のライブラリではないですよね。
183 :
177 :2005/04/14(木) 19:24:08
>>180 StrutsはHTTPリクエストのパラメータをBeanに入れてくれるというだけの仕組み。
>>180 Strus-Layout は、Strutsに欠けているUI関連を大幅に補完してくれる。
たまにソース読まないと使えないが。
187 :
180 :2005/04/15(金) 12:19:21
レスくだすった方々、ありがとうございます。 Strutsが何をするものかは理解していたのですが、 目的を実装する手段として、適切に近いかどうかを知りたかったのです。 まずは、Struts-Layoutを調べてみます。
188 :
デフォルトの名無しさん :2005/04/15(金) 13:11:58
>>187 多分同じような業務をしていると思うので一言。
俺はJSTL+JSPで画面回り、
HTTPリクエストはStrutsでbeanに入れて
DBとの通信はHibernate、
全体の管理はSpringでやってる。
>>180 みたいなことはサクサクっとできると思う。
>>188 だったら全部Springでいいんじゃね?
なぜにStrutsを?
>>189 「HTTPリクエストはStrutsでbeanに入れて」
これはSpringをやるのはめんどう。
結論:Springは面倒。
準備は面倒だけど手間は減る。
往々にして、準備の手間の方が減る手間を上回る罠。
減る手間のほうはこれからも減りつづけるから。
195 :
188 :2005/04/18(月) 13:34:13
>>194 そそ。似たようなサイトは一回作っちゃえば使いまわしできるし
SpringのAOPは意外と優れてる。
AspectJとかに比べるとキビシイのかもしれないけど、
ログインチェックとか、エラー処理とか
普通に使う分にはまったく問題ない。
質問です。 <logic:equal value="0" name="option_flg">あり</logic:equal> <logic:equal value="1" name="option_flg">なし</logic:equal> option_flgの値をみて、HTMLに『あり』、『なし』の表示をさせたいのですが、 messegeプロパティなどを使って出力させないとだめでしょうか? 現状、値を与えても何も表示されません。
ちゃんと値入ってるのかよ?
198 :
196 :2005/04/19(火) 16:34:15
>>197 さん
すみません。値が入ってませんでした。
めちゃ恥ずかしいです
初心者スレでも質問したのですが、再度ここで質問させていただきます。
何か気づくところがあるかt、宜しくお願いします。
http://pc8.2ch.net/test/read.cgi/tech/1112950312/535-536 ActionServletを呼び出し、画面遷移しようとする下記のような例外が
発生します。
どうも、tilesファイルが定義されていないようで、いろいろとWEBと本を
参考にし、同じようにやっているのですが、同じエラーが出てしまいます。
どなたか心当たりある方、ご教授お願いします。
2005-04-18 22:20:44 StandardWrapperValve[action]: サーブレット action のServlet.service()が例外を投げました
java.lang.NullPointerException
at org.apache.struts.tiles.xmlDefinition.FactorySet.getDefinition(FactorySet.java:116)
at org.apache.struts.tiles.definition.ComponentDefinitionsFactoryWrapper.getDefinition(ComponentDefinitionsFactoryWrapper.java:86)
at org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition(TilesRequestProcessor.java:153)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:300)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
ちなみに、Tilesの定義はstruts-config.xmlで下記のように定義し、tiles-defs.xmlとstruts-tiles.tldは
WEB-INFの下においております。
<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
<set-property property="moduleAware" value="true" />
<set-property property="definitions-parser-validate" value="true" />
</plug-in>
(続き) ちなみに、Tilesの定義はstruts-config.xmlで下記のように定義し、tiles-defs.xmlとstruts-tiles.tldは WEB-INFの下においております。 <plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" /> <set-property property="moduleAware" value="true" /> <set-property property="definitions-parser-validate" value="true" /> </plug-in> 補足として、ボタンを押して画面遷移しようとするとき、 FormBeanが生成され値が保持され、Actionロジックまでは正常なログが 出ています。やはり、遷移のときの問題のようです。。
struts-tilesタグ使うだけならTileのプラグインとか全く不要なわけだけど、それはさておき、 tiles-defs.xmlの中身とか、struts-config.xmlでforward先とかはどうなってるんだ? 何か存在しない先に飛ぼうとか存在しないページを表示しようとかしてない?
>>201 さっそく返答ありがとうございます。
■tils-defs.xmlの抜粋
<definition name="tJsp.Common" path="/tJsp/layouts/layout.jsp">
<put name="title" value="TestMainPage" />
<put name="header" value="/tJsp/common/header.jsp" />
<put name="menu" value="/tJsp/common/menu.jsp" />
<put name="body" value="/tjsp/TestMain.jsp" />
</definition>
<definition name="tJsp.Success" extends="tJsp.Common">
<put name="title" value="SuccessPage" />
<put name="body" value="/tJsp/TestSubPage1_a.jsp" />
</definition>
■struts-config.xmlの抜粋
<action path="/hoge1"
type="tAction.Action1"
name="Form1"
parameter="textFieldTest">
<forward name="success" path="tJsp.Success"/>
<forward name="failure" path="/tJsp/TestSubPage1_b.jsp"/>
</action>
ログを出力から判断したところ、
Action1クラスの処理終了からtJsp.SuccessのJSPへ遷移する間の
ところで、ぬるぽいんたーExcetptionが発生しているのは
わかっているのですが。。
>struts-tilesタグ使うだけならTileのプラグインとか全く不要なわけだけど
そうなんですか?
tiles-defs.xmlをレイアウト定義ファイルとして使うには、
>>200 にある、<plug-in>要素に囲まれている部分の記述は必須だと思っておりました。
tiles-defs.xml内のJSPのファイル名が正しくないとかじゃない? そうでなければ、 putタグ内のnameと、JSPファイル内のtiles-insertタグのattribute属性が 合致していないとか。
>>204 レスありがとうございます。
いまいちど、実行し確認してみたのですが、パスの指定は間違いがないかと
思います。
ちょっと頭を冷やして、また時間ができたときに対応することにします。
206 :
デフォルトの名無しさん :2005/04/23(土) 11:42:39
strutsって相対パスを出力する事が出来ないのでしょうか?
global-forwardはpathに./hoge.jspとかにすることで相対パスが得られますが、それ以外の部分でこのような記述をするとエラーがでてしまいます。
actionforwardにも相対パスを出力するようなオプションが見あたりませんし、みなさんはどうしてますか?
デフォルトではwebアプリのルートからの絶対パスを返すので
http://localhost:8080/webapp/ のような場合は問題ないですが
http://localhost:8080/~hoge/webapp のようなときにはActionForwardなどを使って飛んだときに正しくないURLになってしまってうまくいきません。何かいい手はない物ですかねぇ。
ちなみに環境は
tomcat5
struts1.24
apache2(tomcatにリバースプロクシをしている)
相対パスはき出さしてわざわざしがらみ作ってどうするんだ。 apacheかtomcatの設定でなんとかできるんじゃないの?
>>206 相対パスを使う必要は無い。
コンテキストパスか、コネクタの設定がまずいと思うよ
DynaActionFormのプロパティに配列のクラスを指定した場合 <form-bean name="DynaActionForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="id" type="java.lang.Integer[]"/> いくつ値が入力されているかわからない状態で、このidの値をすべて取得したいのですが、 どのようにしたら良いでしょうか?(Integer[]に格納したい)
210 :
209 :2005/04/25(月) 15:41:49
自己レスです。 すみません、解決しました。
struts1.2以降に対応したeclipseプラグインってありませんか?
212 :
デフォルトの名無しさん :2005/04/25(月) 16:26:32
NitroXとかどう? 英語だけど、詳しいチュートリアルとか付いてる。
>>211 Struts1.2の何に対応して欲しいんだ?
eclipse使っているんだから、Actionクラスが増えたとかなら、struts.jarを入れ替えるだけだろ?
214 :
デフォルトの名無しさん :2005/04/26(火) 17:38:23
Strutsのvalidateチェックで文字数のチェックをしたいのですが、 バイト数単位でチェックをかけてくれるのでしょうか。 HTMLのmaxlengthみたいに全角半角の区別は してくれないんでしょうか?
>>214 > バイト数単位でチェックをかけてくれるのでしょうか。
しない。Validatorのルールを自作する必要がある。
> HTMLのmaxlengthみたいに
これはブラウザ依存だ。ブラウザによってカウントの仕方が違うから注意しろ
ブラウザ依存だがHTMLの仕様的には文字数のチェックでバイト数じゃないと思われ
HTMLの仕様がどうだろうが、ブラウザによっては仕様を満たしてないから注意しろって琴田。 そんな糞ブラウザなんぞ無視するなら問題ないが。
DBがPostgreSQLなのでキニシナイ
219 :
デフォルトの名無しさん :2005/04/27(水) 16:37:39
>>218 Postgresなら桁数は関係ないんですか?
保存がCSVなのでキニシナイ
MySQLも次のバージョンから関係なくなるんだっけ? 何も考えずにバージョンあげるとひどい目にあうらしいが
MySQLは、ごんごん動きが変わってるからね。
何の話だ?
JR西日本の社員が事故当日セックルしてたのがけしからんという話。
藤井隆ごときが乙葉とセックルしてるのがけしからんという話。
かなり初歩的な質問かも知れませんが、struts-configの、 actionのinputとか、forwardのpathとかに、 jspを書かずに別なpathを書くのは、どういう意味があるのでしょうか? 会社のソースを見ると、jspを直接書かずに何もしないActionクラスを呼んで から表示してる場合が結構あるんですが、これの意味が分かりません。 strutsの入門書を何冊か読んでみてるのですが、分かりませんでした。 こういうテクニックみたいなことも書かれている本はないでしょうか?
227 :
デフォルトの名無しさん :2005/05/10(火) 12:26:49
Init.propertiesというメッセージリソースファイルをresourcesフォルダにおき、 PropertyResourceBundle resourceBundle = PropertyResourceBundle.getBundle("Init"); String PARAM1 = resourceBundle.getString("INIT.PARAM1"); にて、リソースファイルのパラメータにアクセスしたいのですが Caused by: java.util.MissingResourceException: Can't find bundle for base name Init, locale ja_JP at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) というエラーメッセージがでてしまいます。 strutsを使わないservletでこの方法を使っていたのですが、strutsでは無理なのでしょうか? struts-config.xmlに <message-resources parameter="resources.Init">も記述済みです。
228 :
227 :2005/05/10(火) 12:41:02
自己レスです。解決しました。
PropertyResourceBundle.getBundle("resources.Init");ですね(^^;
単純ミス・・・
>>226 さん
テクニックというか、何もしないActionクラスを経由するのは
意味がないと思うのですが・・・。
>>226 フォワードしてるとか、ディスパッチしてるとか?
他の板でも聞いたけどStrutsの初心者向けの解説書ってあります? Java勉強始めたばかりで基礎はあやふやだけど習いました
基礎って、webのほうもちゃんとやったのか? 基礎といいつつ文法しか勉強してないなら、代表的なクラスとサーブレット/JSPは勉強してないと。
232 :
230 :2005/05/12(木) 22:42:48
サーブレットやJSPは駆け足ながらも一応は習いました。 研修中なんでペースが早くてその上初心者なんで追いつくので精一杯です
234 :
232 :2005/05/14(土) 01:16:50
レスどうもです。XMLのつなぎ方がごちゃごちゃしてて解りづらくて、 研修はわかんないとこはネットで自分で調べたほうが身につくというわかんない方針なんで 本買ったほうがいいなと思ったんで。 クラスわけと継承が理解しきれてないんでそっちから重点的にやります。
Strutsで、可変個の入力項目があるときに、そいつらにバリデーションかけるにはどういう設定が必要ですか? 擬似コードで書けば class TestForm extends ValidatorForm{ class sub{ property String a; property String b; } property String code; property sub sublist(int index); } みたいな感じで、プロパティsublistが可変長のとき、sublistの中のaとかbとかに入力チェックをかけたいんです。 関係ないけど、プロパティ構文ほしい。
>>236 ありがd
いまは手元にないけど、その本持ってるので見てみます。
>>236 すみません,別の者ですが質問です.
もしかしてStruts1.2版にしか載っていないのでしょうか?
手元に1.1版があるのですが,見つけられないのです.
>>238 1.2版のみだね。他にも加筆されていることが多いから買い直してもいいんじゃない?
高い本じゃないし。
240 :
238 :2005/05/19(木) 13:17:02
>>239 ありがとうございました.今度書店で見てみます.
すみません,indexedListProperty を,フォームビーンに XDoclet で指定するには どのように記述すれば良いのでしょうか?
242 :
デフォルトの名無しさん :2005/05/24(火) 23:38:53
Strutsが出力するJavaScriptはXHTMLに対応しているかよくわからないのですが、 経験のあるかたいらっしゃいますか?
JSPと生成されるHTMLは無関係なので XHTMLを出したければ自分で書けばいいだけです Strutsタグは余計な属性もつけないので問題なし あー、どっかに余計なNameは使うかも。未確認
iterateに関して教えてください。 Formのクラスが内部にCollectionを持つとして、 そのCollectionに対して、アクセサをoverloadすると、 <logic:iterate>でそのFormとpropertyを指定すると「getterがない」って 怒られるですけど、overloadはしてはいけないんですかね? FooForm { List list; List getList() FooBean getList(int i) } <logic:iterate name="foo" property="list" type="FooBean">
246 :
デフォルトの名無しさん :2005/05/26(木) 10:28:18
Strutsの質問なんですけどいいですか? QueryRunnerのqueryメソッドやupdateメソッドと ResultSetのexecuteメソッドやexecuteUpdateメソッドでは どちらが使いやすいと思いますか? 分からないとかの質問じゃなくて、両方使ってみて、 使いやすいのが前者だな、と俺が思ったわけで、 みなさんはどう考えているのかな、と知りたくなったので。
Strutsの質問など一つもしていないのに、ちゃんと誘導してやる
>>247 はなんて優しい奴なんだろう。
それが日本人の和を尊ぶ気質。
漏れは
>>247 の中に大和魂を見た。
×和を尊ぶ気質 ○村八分 >247は外人で。
252 :
デフォルトの名無しさん :2005/05/29(日) 03:22:34
Web開発で今はStrutsが強いけど将来的にはSpringやJSFが有望ってよく言われますが StrutsとSpringやJSFを比較して技術的な面でそれぞれのメリットとかあるのでしょうか? またJakartaの本でStrutsでデータベースを扱うとき トンクーってのがあると書かれてましたが 基本的にStrutsでDBを扱うときトンクーを使うのが一般的なやり方なんでしょうか? それとも一般の開発などではもっと違うやり方が使われているのでしょうか? 基本的にWeb開発ってDBを使うことが多くなると思いますが…
>>252 > StrutsとSpringやJSFを比較して技術的な面でそれぞれのメリットとかあるのでしょうか?
・コントローラコンポーネントをPOJOで作成できる
・UIコンポーネントベースなので、ViewとControllerの責務を明確に分離できる
・UIコンポーネントベースなので、統合開発環境などでUIを作成できる
> Strutsでデータベースを扱うとき トンクーってのがあると書かれてましたが
おそらくどこにもそんなことは書いていないと思います。初耳です。
254 :
デフォルトの名無しさん :2005/05/29(日) 03:43:03
>>253 ありがとうございます
トンクーではなくトルクーでした
2,3年前ぐらいに出た
Jakartaプロジェク徹底攻略って雑誌の中にある
Strtus完全入門のコーナーの中に載っています
>>254 StrutsとTorque(トルク)は直接は関係しない。
Torqueはもう開発も止まっているし、O-Rマッピングフレームワークとして
似たようなコンセプトのHibernateが主流になっていくのが今の流れ。
ただし、基幹システムクラスのシステムで運用段階で実際に使われている
かというと、まだまだ少数派だろうね。
StrutsとSpringは層が違うから、比較する意味ないね。 むしろ、StrutsとSpringは組み合わせて使う。 Struts+Spring+Hibernateとか、いい感じ。 JSFなんだけど、JSFはWebシステム向けでWebを意識しないように作られているから、逆にWebを意識したい場合には制御がやりにくい部分がある気がする。
257 :
デフォルトの名無しさん :2005/05/29(日) 10:10:17
Curl+Spring+Hibernate
258 :
デフォルトの名無しさん :2005/06/01(水) 11:00:10
Actionクラスのインスタンスって、毎接続ごとに生成されますよね?
いいや。
>>258 されません。付属のドキュメントぐらい読んでください。
そうか、よし、ちょっと読んでくる。 さんきゅう。
思いっきり書いてあった。 ふう、危なかったぜ。
でも、Springとか使えば、接続ごとにインスタンス化されるようにできる。
264 :
デフォルトの名無しさん :2005/06/02(木) 19:09:33
Struts1.2のワイルドカードマッピングについて質問です。 入力画面→確認画面→完了画面と遷移させる場合に、 確認画面でエラーがあれば、入力画面に戻す。 完了画面でエラーがあれば、確認画面に戻す。 といった動きをさせています。 <action path="確認" type="確認Action"> <forward name="success" path="確認.jsp"/> <forward name="error" path="入力.jsp"/> </action> <action path="完了" type="完了Action"> <forward name="success" path="完了.jsp"/> <forward name="error" path="確認.jsp"/> </action> と記述しているのですが、この場合ワイルドカードマッピングするメリットは ないのでしょうか?遷移先が複数あるとベタで書くのと一緒かなと・・・ それか、エラー画面が固定とか。 なんか汎用性がなくてあんまり使えないような。
265 :
デフォルトの名無しさん :2005/06/17(金) 14:40:08
iis + weblogicでstrutsを使ってWebアプリを作っているのですが 初回アクセス時のみURLがrewritingされてjsessionid= が付与されてしまいます。 そうするとiisが○○.doへのアクセスではなく ○○.do;jsessionid=××へのアクセスと判断して Weblogicにプロキシしてくれなくて404エラーになってしまいます。 struts-config.xmlのforwardタグでredirect="false"にしても、なぜか付与されてしまいます。 この際iisに○○.do;jsessionid= もWeblogicにプロキシしてもらうようにしようかと思ったのですが アプリケーションのマッピングの拡張子に";"が使えないようで設定方法がわかりません。 jsessionid=××が初回でも付与されないようにするか jsessionid=××がついていてもコンテナに渡すようにしたいのですが どうしたらよいでしょう。 ご教授お願いいたします。
>>265 weblogic.xmlのURLRewritingEnabledをfalseにすればいいんじゃねーの?
というか、ブラウザでCookieをはじいてない?
ブラウザCookie許諾してても、初回はSessionID出るよ。
268 :
デフォルトの名無しさん :2005/06/20(月) 12:11:36
>>266 ありがとうございます。
今回はPCブラウザの他に携帯も使用するので、
Cookieがあってもなくても同じ遷移をするようにしたいのです。
weblogic.xmlにURLRewritingというタグがあるのですか?調べてみます。
ところでURLRewritingをfalseにすると、sessionスコープが使えなくなるんでしょうか。。。?
269 :
268 :2005/06/20(月) 15:53:47
WebLogic.xmlに次のタグを加えたところ、jsessionid=なんちゃらというのは出なくなりました。
<session-descriptor>
<session-param>
<param-name>
URLRewritingEnabled
</param-name>
<param-value>
false
</param-value>
</session-param>
</session-descriptor>
で、sessionスコープも実験してみたところ使えるようです。
Cookieを拒否する設定にしてもsessionは維持されていました。
これで、いけそうです。ありがとうございます。
ところで、
>>268 でも書いたんですが、
Cookieも使わず、jsessionid変数も投げずに、どうやってブラウザからのリクエストをセッションに振り分けてるんでしょうか。。。?
普通に動いている理由がわからない。。。
Cookie でもセッション変数でもないなら HTTP/1.1 の keep-alive をアプリケーションサーバ側が処理してるんじゃね?
271 :
268 :2005/06/23(木) 10:20:48
>>270 でもkeep-aliveってのはセッションを維持するというより、TCP/IPの接続を維持するって感じですよね。
APサーバが「さっきと同じHTTP接続だから同じ人だろうから、このセッションでおけ」と判断して
セッション変数を投げているとすれば、
keep-aliveなんていつclose出されるかわからないわけだから
それに頼ってセッションを維持するのは
かなり不安定な設計、ってことなんでしょうか??
うーん、こまった。。。
クッキーオフにしてjsessionidもオフにしたら、セッションなんて維持できないだろ なんか間違ってね? もう一回テストしてみ
>>271 InetSpyなりを仕込んで、本当にCookieが飛んでないかどうか確認してみて。
もし本当にどっちも使ってないのにセッションが継続されてるなら、すごく興味があるから。
274 :
268 :2005/06/23(木) 13:40:17
IEのインターネットオプション→プライバシー→詳細設定で自動Cookieを上書きにして クッキーをブロックするを選択して、Cookieを削除した後IEを再起動。 strutsのActionクラスでStringを一つ持つbeansのインスタンスを作って そこに"test"とセットしてセッション変数に入れて初期JSP画面表示。 その後リンクボタンで別の画面に遷移。 遷移した画面のJSPタグでセッション変数のStringの変数を取り出す。 そうすると画面に"test"と出てくる。 これってセッションが維持されてるってことですよね。。。 URL Rewritingはオフにしてるし。。。実験の仕方がまずいのかなあ。
>>274 実験の仕方がまずいな。
設定を変えたからCookieがオフになっているはず、という思いこみがある。
>>273 の言うように、Cookieが本当にオフになっているかどうか、通信内容を見て判断するべきだ。
IE5以降は、イントラネットではクッキーをオフにできないぞ。
その設定は「インターネットゾーン」となっていることには気がついているか?
FireFoxならサイトごとにクッキー許可・ブロックの設定できるぞ お試しあれ
277 :
268 :2005/06/23(木) 14:00:58
>>275 >IE5以降は、イントラネットではクッキーをオフにできないぞ。
まじですか。じゃあクッキーが飛んでいるのかも。
テスト環境がXPなんでInetspy入れられない。。。
んー、どうしようか。
せめてクエリー文字列が○○.do?jsessionid=××だったらIISも通るのに。。。
>>274 URL Rewritingの動作確認中に同じ症状になったことがあります。
同じように書いても、OperaだとURL Rewritingされて、
IEだとさもクッキーが有効かのように動いてました。
思うんですが、クッキーをブロックしてもファイルとして保存しなくなるだけで
プロセスのメモリ中にはちゃんと作ってるんじゃないんでしょうか?
279 :
268 :2005/06/23(木) 14:04:01
>>276 ありがとうございます。火狐ですか。
スレイプの設定でクッキーを無効にしてもセッションを維持できてたもんで
すっかりそういうものだと。。。
280 :
268 :2005/06/23(木) 14:14:55
firefoxを入れてlocalhostのクッキーを不許可に設定してテストしたところ javax.servlet.jsp.JspException: Cannot find bean test in any scope ・・・やっぱり世の中そう甘くはないようです。 例えばhidden内にjsessionidを埋め込む形でも構わないんですが 具体的な書き方がわかりません。 ご教授願えるとありがたいです。
自分でセッションIDの生成と管理をするしかなかばい
283 :
268 :2005/06/23(木) 14:24:47
>>282 本当だ。127.0.0.1/〜でテストしたらエラー出ました。
はあ、、こまった。。。
1. WebサーバをApacheに変更することを提案 2. Webサーバを使わず、全部Weblogicでやることを提案 3. セッション管理機構を設計、実装 4. あきらめる
285 :
268 :2005/06/23(木) 14:54:25
286 :
268 :2005/06/23(木) 14:56:23
一応最後の最後の最終手段として 「IISのアプリケーションマッピングを".*"にする」 という逃げ道も考えてはいます。 でもこれじゃあ何のためにIISはさんでいるのかわからないので もう少しあがいてみたいです。
287 :
268 :2005/06/23(木) 20:23:21
かなり強引ですが、無理矢理解決しましたので報告します。 ・一番最初に表示するJSPページの<head>〜</head>の中に <% session.setAttribute("sessionId",session.getId()); %> と書く。 ・各JSPページのフォームタグの中に <input type="hidden" name="JSESSIONID" value="<%= session.getId () %>"/> と書く。 これでボタンで画面が遷移されたときにセッションIDが維持される。 ・各JSPファイルのリンクタグに <html:link action="/init?action=Insert" paramId="JSESSIONID" paramName="sessionId" >新しいデータを登録する。</html:link> のように書く。 これでリンクによる画面遷移時にもセッションが維持される。 以上です。 要するにセッション管理というのは「JSESSIONID」という変数を(Servlet2.2に限ってデフォルトで)受け渡しすればよいのだ ということがわかりました。 勉強になりました。
>>287 そのやり方だとコンテナの実装依存になるような気がしないでもないが、
想定した環境で動作し、今後も変更される可能性が低いのなら今回に限り
それで逃げてもいいでしょうね。
>>287 URLRewritingEnabledをfalseにして自前でやる意味がよくわからない。
>>289 >>265 のIIS連携の話から始まってるからじゃね?
こやつのこの調査能力のなさから見て、
そもそも本当にIIS-Weblogic連携でjsessionidが使えないのかどうかも少し怪しいけど…漏れはWeblogic触ったことないからシラネ
tomcatの if( sb.length() > 0 ) { // jsessionid can't be first. sb.append(";jsessionid="); sb.append(sessionId); } の部分を sb.append("?jsessionid="); に変えてみたら? 5.5だとorg.apache.catalina.connector.Response 5.0だとorg.apache.coyote.tomcat5.CoyoteResponse かな?ちょろっと見ただけだからあってるか不明w
>>290 WebLogic触ったことすらない趣味プログラマーにすら怪しまれる
>>287 ww
>>292 tomcatじゃなくてWebLogicらしいぞ。
294 :
デフォルトの名無しさん :2005/06/29(水) 16:01:00
JBOSSで似た現象の対応をしたことがある。 Tomcat5の場合、CoyoteResponse.isEncodeableでID付加の 判断を行っているが、そのソースを読むと HttpSessionが作られてなければIDは付加されない。 だから最初のアクセスのときにSessionが作られないように JSPに<%@ page session="false" %>と書いてやったら解決した
>>294 でもそれだとCookie使えない時はどうするの?
296 :
デフォルトの名無しさん :2005/07/15(金) 17:49:51
お聞きしたいことがあります。 validatorについてなんですが、2つの日付の大小関係をチェックしたいと考えています。 条件として、 1.入力欄1に打ち込んだ数字が日付として正しいかをdateでチェックする。 2.入力欄2に打ち込んだ数字が日付として正しいかをdateでチェックする。 3.1と2の条件を満たした場合のみに入力欄1と入力欄2の大小関係をチェックする。 1と2はいいのですが、3をどうすればいいのかが分かりません。 フィールドが2つになると思うので、単純にvalidwhenを使うことができないのですが、何かいい方法は無いでしょうか? よろしくお願いします。
FormBeanのほうに比較用の文字列なり数値なり返すメソッド用意するのはどうか
299 :
デフォルトの名無しさん :2005/08/27(土) 00:44:29
質問させていただきます。 windows上でstruts使って勉強してます。 struts-configにデータソースの設定を書いているのですが、tomcat起動時にエラーが出てしまいます。 ■コンソールのエラーメッセージ 致命的: データソース org.apache.struts.action.DATA_SOURCE の初期化 org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class 'org.postgresql.Driver' at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:766) (中略) Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver at org.apache.catalina.loader.StandardClassLoader.loadClass(StandardClassLoader.java:854) (以下略) ■struts-configの内容 <data-sources> <data-source type="org.apache.commons.dbcp.BasicDataSource"> <set-property property="driverClassName" value="org.postgresql.Driver" /> <set-property property="url" value="jdbc:postgresql://localhost:5432/test?useUnicode=true&characterEncoding=Windows-31J" /> <set-property property="username" value="postgres" /> <set-property property="password" value="hogehoge" /> </data-source> </data-sources> ぐぐっても同様の質問は見つかりますが解決した例がありません。 tomcatは5.0、strutsは1.2.7です。初心者でよくわからないのですが、 この他に必要な情報があれば、言っていただけると出せると思います。 よろしくおねがいします。
>>299 > Caused by: java.lang.ClassNotFoundException: org.postgresql.Driver
原因がズバリ書いてあるじゃないか。
>>300 えと、potgresのドライバのjarはビルドパスに入れております。
でもなぜかClassNotFoundException出てるんですよね。
struts1.2からおかしいらしいのですが…
>>301 ビルド時のクラスパスに含まれていても、
実行時に有効なクラスパスに含まれていないと意味がない。
そんなこともわからんのか。
Struts以前の問題だな。
>>302 えと、実行時に有効なクラスパス、とはなんなのでしょうか?
eclipseではじめたのでそういう事にうとくて…
ちなみにstruts1.1で作った別のものはうまく動いているのですが…
>>303 Servletの入門書でも読んで、「デプロイ」とか必要なリソースの配置とか勉強し直せ。
/WEB-INF/lib/postgresql-xxx.jar
普通JNDI使うもんじゃないの? そうすると、Tomcatなら${CATALINA_HOME}/common/libあたりにpgXXXX.jarを 置いておくことになるけど。
>>305 うーん、/WEB-INF/lib/postgresql-8.0-310.jdbc3.jarってドライバをインポートして、
eclipseでビルドパスに追加・・・ってしているのですが。
>>306 その方法も調べてやってみます。
>>306 tomcatの/commons/libにドライバを配置しただけですがあっさり動作しました。
ご回答くださった皆様、ありがとうございました。m(_ _)m
っていうか、struts-configにDataSourceの設定を書くのは今のバージョンじゃ非推奨になってると思うけど 素直にTomcatのDBCP設定を使ってInitialContextで取得した方が良いと思う
310 :
デフォルトの名無しさん :2005/08/27(土) 09:46:24
>>309 そのとおりだが、非推奨を真に受けていると、
初期バージョンのほとんどの機能が使えない・・・
勉強なんだからいいじゃんべつに
>>312 勉強だからこそ、一番勧められる環境でやるべきだ。
業務なら過去のしがらみとかでぐだぐだ。
314 :
デフォルトの名無しさん :2005/08/29(月) 21:45:52
>>310 >>311 そのあたりの非推奨情報ってどこかにまとまっていませんか?
普通にググルとBeansタグとか使ってる例がいっぱいでてきて疲れる。
非推奨APIとかのサイトじゃだめなの?
Beansタグとかは、リリースノートに非推奨と書かれてるわけじゃないだろ?
318 :
デフォルトの名無しさん :2005/08/30(火) 19:33:44
strutsでFORM認証する方法教えて下さい。 ぐぐりましたが方法見つかりませんでした。 web.xmlとtomcatのserver.xmlといじくる方はなんとなくわかるのですが、 struts-config.xmlの記述の方法がよくわかりません。 <action-mappings>の<action>にroles="hoge"を記述する方法が知りたいのです。 どこかページを紹介していただくだけでもかまわないのですが・・・
>>318 よくわからん、てどういうこと?
<action path="/Sample" type="net.wings.SampleAction"
name="SampleBean" scope="request" roles="admin,manager">
<forward name="success" path="/sample.jsp" />
</action>
こんな感じでいんでねの?
>>319 その場合、web.xmlはどう書けばいいのでしょうか?
あと、struts使わない場合、jspのフォームに
<form method="POST" action="<%= response.encodeURL("j_security_check") %>">
<input type="text" name="j_username" >
<input type="password" name="j_password" >
<input type="submit">
</form>
と書くと思うのですが、これstrutsで書くとそもそもaction="j_security_check"を
どう書き直していいかわからないんですが…
>>320 そもそも、そこはStrutsの機能を使うところじゃない。
Servletコンテナに任せる部分だから
Strutsとは関係ない。
Strutsを使ってても使わなくても同じ。
>>320 普通にアクションクラスに飛ばして、
そのクラス内でセキュリティチェックすればいいんじゃないの?
>>320 まず、認証の方法が幾つかあるので、それを理解して、今回何を使いたいのかを決定させる。
いま、書かれてるのは、Strutsは関係無くて、Tomcatでの認証方法。
でもって、その認証の情報(ロール)をStrutsで利用しようというのが、
>>319 で書かれた、rolesの部分。
この方法なら、@ITのJavaTipsにでも載ってるから参照してみる。
もう1つはStrutsの中で完全に独立して認証の仕組みが作れる。
これは、Strutsのサンプルとしてwarファイルが用意されている。
Exampleの方ではなくてmailなんとかって方にユーザを登録して、
ログイン、ログオフ、認証などの一連の処理が書かれている。
ただし、このサンプルはXMLでのファイル形式でユーザを管理している。
この部分をDB使った方法にするなどは普通にDB使ってデータの登録とか検索などができるなら、
それほど難しくは無い。
requiredifは、依存項目の状態を見て対象項目の必須チェックをしますが、 依存項目の状態を見て、date、e-mailチェックをするしないはできるでしょうか。 メール送信先チェックボックスがチェックされていたら、 必須チェックと、メールアドレスのチェックをしたいのですが、 チェックをしないで不正なemailを書くと、エラーが出てしまいます。 ここを、チェックしていないときは一切チェックを走らせないようにしたいです。 validwhenを使用しても、条件的に無理でした。
struts勉強中の者ですが、質問させて下さい。 struts1.2.7のバイナリをダウソロードしてきて解凍しました。 eclipseでTomcatプロジェクトを作って、そこにstruts-blank のwebapps以下のものを全てインポートしました。 ここからが問題なのですが、まず、そのままブラウザで アクセスすると、Welcome.doに飛ばされて表示されるのですが、 eclipseでstruts-blankのlib以下のjarファイルを「ビルドパスに追加」 すると、同じurlを入力してもエラーが表示されてしまいます。 エラーの内容は javax.servlet.ServletException: キー "welcome.title" に対応するメッセージが見つかりません org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:846) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:779) org.apache.jsp.pages.Welcome_jsp._jspService(Welcome_jsp.java:81) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) (以下略) なのですが・・・。 なぜjarをビルドパスに追加するとエラーになってしまうのでしょうか?
MessageResources.propertiesが消え去るから
327 :
デフォルトの名無しさん :2005/09/13(火) 12:43:23
質問させていただきます。Struts初心者です。 ログイン画面の初期表示で、メッセージリソースファイルからタイトル名称を取得して表示させたいのですが以下のエラーになります。 致命的: サーブレット jsp のServlet.service()が例外を投げました javax.servlet.jsp.JspException: Bean loginForm のプロパティ title に対するゲッターメソッドがありません at org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:1031) at org.apache.struts.taglib.bean.WriteTag.doStartTag(WriteTag.java:227) at org.apache.jsp.WEB_002dINF.jsp.login_jsp._jspx_meth_bean_write_0(org.apache.jsp.WEB_002dINF.jsp.login_jsp:127) at org.apache.jsp.WEB_002dINF.jsp.login_jsp._jspService(org.apache.jsp.WEB_002dINF.jsp.login_jsp:89) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) (以下略) ■ストラッツ設定ファイル <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm"> <form-property name="name" type="java.lang.String"/> <form-property name="password" type="java.lang.String"/> <form-property name="sysno" type="java.lang.String"/> <form-property name="titile" type="java.lang.String"/> </form-bean> <action path="/init" type="jp.co.stl_inc.ors.ors_h.action.InitAction" name="loginForm" scope="session" validate="false"> <forward name="success" path=".logonLayout" /> </action>
328 :
デフォルトの名無しさん :2005/09/13(火) 12:44:43
(続きです) ■アクションクラス public class InitAction extends Action { public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FormBeanConfig config = mapping.getModuleConfig().findFormBeanConfig("loginForm"); DynaActionFormClass dClass = DynaActionFormClass.createDynaActionFormClass(config); DynaActionForm dForm =(DynaActionForm)dClass.newInstance(); dForm.set("titile","login.title"); request.setAttribute("loginForm",dForm); return mapping.findForward("success"); } } ■JSP <html:form action="/login" > <bean:message name="loginForm" property="title" /> </html:form> ActionFormを使っていたときはアクションクラスでsetTitlsメソッドを使って設定することで表示されていました。 DynaActionFormにしたところセットされなくなりました。何が原因なのでしょうか?よろしくお願いいたします。
>>327 loginFormのtitleのつづりが間違ってる
普通、エラーメッセージからまずそこをチェックすると思うが・・・
>>329 ありがとうございます。ご指摘の通りです。修正したらうまくゆきました。
エラーメッセージ、言われてみるとその通りのことを書いてありますね・・・
勝手にDynaActionFormとかの問題だと思い込んでました。申し訳ありません
331 :
デフォルトの名無しさん :2005/09/17(土) 22:54:58
DynaValidatorFormを使用したフォームがあります。 これに、validation.xmlで行っているエラーチェックのほかに 独自のチェックをいくつか追加したいと思っています。 新たに追加するチェックは、validation.xmlに書くのは ちょっと難しいので、validate()メソッドを自作したいのですが、 この場合、DynaValidatorFormを使うのをやめて ValidatorFormクラスを作らなければならないのでしょうか。
332 :
デフォルトの名無しさん :2005/09/23(金) 20:29:51
最近 Struts を触り始めました。 どうしてもわからないことがあるので、どなたか教えてください。 Action のプロパティ name で定義する ActionForm (bean) ですが、 Action を中心に捉えた場合、その in 側なのか out 側なのか、 どちらに対して定義しているものなのでしょうか。 in 側のパラメータを JavaBean としてまとめたもののようですが、 foward された jsp で <bean:write> で呼ばれる bean もこれですよね。 何かとんでもない勘違いをしているのでしょうか。 私の今の理解だと、ActionForm には in/out 両方で使うパラメータを すべて定義しなければならないように思えてしまいます・・・
>>332 inもoutも両方定義できる。
というか、Beanにはset/getの両方書くでしょ。
それに、Beanはどこで初期化してもいいんだよ。
大抵のサンプルはxxx.jspからaaa.doのアクション呼び出して、
そこで、引数で渡されたFormをキャストしてActionForm取得してるから、
そういった錯覚に陥るのかもね。
でも、xxx.doでActionFormをnewして初期値とか放り込んで、
xxx.jspを呼び出して、その値を表示させる。
そして、aaa.doを呼んで入力した値を取り出すとかそういった事が可能。
334 :
デフォルトの名無しさん :2005/09/24(土) 14:08:03
入力用と入出力用の値はActionFormにすると思うけど、 出力専用の値の場合でもActionForm作ってますか? 出力用の場合は、POJOでもいいような気が・・・
出力専用はPOJOだろ。 ActionFormはあくまで入力用。
336 :
デフォルトの名無しさん :2005/09/24(土) 14:55:36
JSPで<jsp:useBeanタグを書くのが気持ち悪い・・・そのぐらいか 出力専用ならPOJOでも別にいいのではないか
>>336 > JSPで<jsp:useBeanタグを書くのが気持ち悪い・・・そのぐらいか
そんなの書く必要ないじゃん。わかってるのか?
出力にActionFormを使うのは推奨されない
StrutsのnestedタグはActionFormの情報をname属性の設定無しに取得してくれるし、 初期値の設定も楽だからActionFormに出力データを入れた方が色々と楽ではあるね。 ただ、このやり方だと、Actionがforward先のJSPのFORMタグと密接につながることになるから 個人的にはあまりお奨めしない。 昔ActionFormに出力データを入れるような手法をとってたプロジェクトに参加してたことあるけど forward先のJSPのFORMのsubmit先が動的に変わることになって、対応に苦労したことがあるよ
出力の場合は、同じActionForm使ってるけどスコープをsessionにしてる Actionのプロパティはrequestっていうか、session使うと苦労しそう
343 :
デフォルトの名無しさん :2005/09/25(日) 00:59:17
>出力にActionFormを使うのは推奨されない 何が推奨されるの? 最初、オレも出力用のデータオブジェクトは どうなっているのかと思ったけど、Strutsでは言及していなかった。 編集画面ではActionFormを使うし、リスト表示でも結局データオブジェクト とかぶる部分が多いので、結局ActionFormあるいはそのリストになった。 小規模なプロジェクトではこれで十分な気がする。 ActionFormって入力フォームのことだと思っていたのだが、VBで言うForm と同じ概念だとすると、出力に使ってもいいのではと思うのだが。
ActionFormはフォームなんだから入力内容をそのまま表示する場合は 出力に使ってもいいけど、そうでない場合は使わないほうがわかりやすい
出力に使っても別にいいけど、入力内容を加工するのだけは いただけないな
>>343 構造体的なクラスでもいいし、マップでもいいと思う。
ActionFormクラスを流用しても構わないと思う。
347 :
332 :2005/09/25(日) 23:20:01
返信遅くてすみません やっぱりあんまり言及されてなかったんですね いくつか書籍とか見てみたんですけど、はぐらかされてるような気がして・・・ 基本的には ActionForm は、名前のとおり html の form とほぼイコールの 入力パラメータの処理 bean であって、出力にはあんまり使わない 出力は JavaBeans を作って、session なり request なりのスコープで jsp 側から使えばいいんじゃないか、と こういう感じなんでしょうか
>>347 だいたいそんな感じでいいんじゃないかな?
話変わるけど、今環境がないから試してないけど
bean;writeタグのpattern属性で日付編集(yyyy/MM/ddみたいなこと)ってできますか?
その場合はDate型かTimestamp型じゃないとNG?
>>347 最近はその考え方がほぼ主流といえよう。
>>348 ドキュメント見た?
format属性でできるけど、プロパティの型はjava.util.Dateかそのサブクラスに限定。
>>350 サンクス
ドキュメント見てなかったです
だいたい感じが分かりました
>>351 ちなみに、内部的にはjava.text.SimpleDataFormatを利用しているから、
format属性に指定できるパターンもSimpleDataFormatと同じ。
353 :
デフォルトの名無しさん :2005/09/26(月) 21:24:55
はじめまして。今Strutsを勉強してるものです。 質問があります。ActionFormとActionFormBeanの違いがいまいちわかりません。 ご教授お願いします。
355 :
デフォルトの名無しさん :2005/09/26(月) 22:26:09
なんどもすいません。 ActionFormBeanは、ActionFormサーブレットで値を格納し、Actionに値を 投げる役目でActionFormはAction内で継承されるだけ?なんでしょうか?
>>355 某サイトから引用
ActionForm クラス
ActionForm はHTMLから送られたデータを、RequestスコープまたはSessionスコープで保持します。
どのスコープで保持されるかはStruts-config.xmlのAction定義に依存します。
ActionForm クラスはフォーム・データの一般的な概念を表すため、これを具現化した ActionFormBean は入力フォームごとに生成することが望まれています。
ActionFormBean では、画面ごとの実際の入力値やそれら入力データの妥当性をチェックする Validate を保持します。
そのため、 ActionFormBean にはフォーム・データの入力値(パラメータ)毎に setPName() と getPName() を用意します。
>>353 とりあえず慣れるまでActionFormBeanは忘れるのがお勧め。
359 :
デフォルトの名無しさん :2005/09/26(月) 23:05:22
ありがとうございます。 では、ActionFormは宣言だけで具現化したものがActionFormBeanということになるのでしょうか? 今までは Action.java 動作を行う場所 ActionForm.java setter、getterがある場所 ***.jsp 画面に表示させる。 Formタグで値をゲット! struts-config.xml…etc というのを作っていました。 requestプロセッサでActionFormBeanに値を自動的にセットされ Actionでその値をget、setなどして動作している?なのでしょうか? 日本語がおかしいところが多々あると思いますが…申し訳ないです。
>>359 > では、ActionFormは宣言だけで具現化したものがActionFormBeanということになるのでしょうか?
もういっぺん出直してこい
>>359 まあ、便宜上ActionFormを継承したものをActionFormBeanってことだと思えばいいんじゃない?
1つ本を買うなりしてサンプルを作れば分かるよ
Strutsって、何でActionFormとActionFormBeanが分かれているんだろう? 一緒にすれば良いのに。
363 :
デフォルトの名無しさん :2005/09/26(月) 23:39:32
でなおしてみました。ごめんなさい。 ActionFormはstruts-configで設定された機能ごとにつけられただけのもので ActionFormBeanは、ActionForm.javaで作成されたものであって、 サーブレットで勝手にセットされる場所もActionFormBeanだとわかりました。 では、Action.javaで継承されてるのはActionFormBeanなんでしょうか…
>>362 橋の真ん中いてそこから根元を鋸で切ったらどうなるんだろう
>>363 すまん、どこから手をつけていいものやら、途方に暮れてしまう。
俺はさじを投げさせてもらう。
>>363 に2ちゃんの書き込みだけで簡潔に説明し、クリアに理解させる奴がいたら神だ。
>>362 どこからそんな発想が?
機能も役割も使われ方も何もかも違うものをなぜ一緒に?
>>361 デタラメ教えるんじゃない。
367 :
デフォルトの名無しさん :2005/09/27(火) 00:04:28
なんとなくわかりました。 今までものすごい勘違いをしていたようです。 ActionFormBeanがsetter、getter、validatorの設定をするところで ActonFormが、struts-configのなかでBeanに名前をつけて 引数としてActionにわたされるもの。 ではないでしょうか… このようになったのですが…
>>367 全然違う。まだまだものすごい勘違いをしているようです。
369 :
368 :2005/09/27(火) 00:16:30
否定するだけではただの煽りなので・・・ ActionFormBeanは、Struts設定ファイルの設定情報を保持している、フレームワークの内部コンポーネント。 ActionFormBeanはStrutsが内部的に使用するのみで、君が直接使うことはまず無いと考えていい。 ActonFormは、君がサブクラスを作成して、プロパティとアクセッサメソッドを実装する。 フォームからサブミットされた情報を持つコンポーネント。 Actionクラスのexecute()メソッドの引数に渡されるのはこっち。 君が作成するActionクラスやJSPページ上で自由に使っていい。
370 :
デフォルトの名無しさん :2005/09/27(火) 00:47:27
ありがとうございます。 Struts-config.xmlなどで設定された情報を保持している物、フレームワークの 内部コンポーネントが、ActionFormBean。 「値」自体がいろんな動きをするのがActionFormということになるのでしょうか… また、間違っているかもしれませんがお願いします。
371 :
デフォルトの名無しさん :2005/09/27(火) 20:23:44 0
すみません。昨日に引き続きまた疑問が出ました。 リクエストプロセッサについてご教授ください。 自分で調べたこと ・アクションサーブレットが、Httpリクエストを受け取り、処理すべきモジュールの判断し、該当のモージュールのコントローラーであるリクエストプロセッサが呼び出される ・モジュール設定ファイルを起動時に読み込む。 ・アクションフォームビーンにHttpリクエストの値を保持させる。 ・アクションを呼び出す ・アクションからアクションフォワード(mapping)を返してもらい、JSPの作成を行う。 ・JSPの作成の際、コンストラクタから値を参照したりもする こんな感じでよろしいのでしょうか?
もしかしてstrutsって超激難しくね?
むずかしいというよりめんどくさい StrutsもJSFもダメダメ
だれかわかる人いませんでしょうか? もしいたら、ご教授お願いします。 ageます…申し訳ない…
>>373 Strutsは、サーブレットに毛が生えた程度として考えればそんなに難しくないんだけど
>>371 みたいな内部的な動きを気にすると難しい気になる。
はっきりいって、最初は内部的な動き気にする必要はない。
あと、解説本が難しく書きすぎ。
377 :
デフォルトの名無しさん :2005/09/28(水) 09:57:28
こんにちは。質問させてください。 struts1.2を使用して検索フォームを作っています。 検索アクションで検索フォームの値を受け取り、検索結果ページを表示させるのですが、 その結果ページのURLに検索条件を入れたいです。 requestやsessionスコープに登録された値からではなく、 URL直打ちからの検索ができるようなイメージです。 検索フォームからフォームの値がsubmitされたときはフォームの値を使って検索(検索表示ページのURLに検索条件が含まれている)し、 リクエストパラメータがある場合は、そこから検索条件を解析し、検索するというものです。 非常にわかりにくい文章ですいません。 どなたかわかるかたがいらっしゃいましたらご教授お願いします。
URL直打ちから、request→formに値が渡されるってことは分かって言ってるのか?
379 :
368 :2005/09/28(水) 12:08:29
>URLに検索条件を入れたいです。 入れればいいじゃん
>>376 ベタにhtmlを書くと
<form method="get" action="/hoge.do">
<input type="test" name="search">
</form>
んな感じで、フォームにayayaって入れて検索ボタンを押すと
ブラウザには
http://hogehoge.com/hoge.do?search=ayayaって残る 。
METHODをGETにする。
actionクラスのexecuteメソッドは引数にHttpServletRequest reqがあるので、
String foo = req.getParameter("search");
で、searchの内容が取れる。fooには"ayaya"が入ってる。
そゆこと。
381 :
デフォルトの名無しさん :2005/10/10(月) 12:54:43
すいません教えてください 入力画面でボタンを押したときのAction内でエラーになったとき 汎用のエラー画面ではなくって、 入力画面に「これこれこういうエラーが出ました」と普通の入力エラーと同じように表示させたいのですが どのようにすればいいんでしょうか 前のページに戻るにはmapping.forwardで遷移先を追加すればいいと思うのですが ActionErrors errors=new ActionErrors(); errrors.add(・・・・); ↑このerrorsをどこに設定というかsetすればよいのか分かりません
382 :
368 :2005/10/10(月) 13:10:10
>>381 ActionErrorsは現在のバージョンでは非推奨。
ActionMessagesを使う。使い方はActionErrorsとほぼ同じ。
Actionのexeceute()メソッド中の処理だったら、
org.apache.struts.Actionクラスに用意されている
saveMessages(request, actionMessages)を呼べばよい。
383 :
デフォルトの名無しさん :2005/10/10(月) 13:16:36
先生↓じゃ画面に何も出てきません。 <input type="test" name="search">
384 :
デフォルトの名無しさん :2005/10/10(月) 13:27:33
>>382 なるほど、そうやっておけば
<errorタグ>に表示されるのですね
ありがとうございます
385 :
デフォルトの名無しさん :2005/10/10(月) 21:45:18
Strutsが出力するJavaScriptって糞じゃねえ? 関係ない関数までごそっと全部入っちゃうし、 ちょっと複雑なMASKを書いたり、validwhenを使ったら、 そこでコンパイルエラーとかなるし。 これって実用性あるの?
>>385 それはおまえさんが糞なだけだ。
> 関係ない関数までごそっと全部入っちゃうし、
はデフォルトのままで使う奴が糞。staticJavascript="false"とか知らないだろ?
> ちょっと複雑なMASKを書いたり、validwhenを使ったら、
> そこでコンパイルエラーとかなるし。
は[CDATA[]]書いてないかエスケープが不十分なだけ。
こうみえて優しい386がお伝えしました。
388 :
デフォルトの名無しさん :2005/10/11(火) 00:16:53
すぁんくす、優しい386さん。 「おまえさんが糞なだけだ。」って言うじゃない。 でも回答になっていません。 staticJavascript="false"とやれば、確かに膨大なJavascriptは付いて来ないが、 代わりに、validateRequiredとかvalidateMaskとかの関数が使えなくなる。 それから、よく見てみたらvalidwhenのjavascriptって存在していないじゃん。 残念、やはりすとらっつは糞、斬り!
386じゃないが・・ >それから、よく見てみたらvalidwhenのjavascriptって存在していないじゃん。 関係ないな。日本語大丈夫? >代わりに、validateRequiredとかvalidateMaskとかの関数が使えなくなる。 適当なJSPに <html:javascript dynamicJavascript="false" staticJavascript="true" /> な感じでstaticJavaScripだけを出力しておいて他のページからそれを参照しろ。 口答えする前にやることあるだろうがこの蛆虫が!
> 代わりに、validateRequiredとかvalidateMaskとかの関数が使えなくなる。 頭悪い人ってかわいそうですね。
391 :
デフォルトの名無しさん :2005/10/11(火) 12:16:24
>>389 何が関係なんだよ。糞ガキ。
レス見て、言ったわけじゃねえんだよ、ボケ。
頭が悪いくせに偉そうな奴は死ぬべき
393 :
デフォルトの名無しさん :2005/10/11(火) 13:31:46
お前の方が偉そうだよ。 自分のことを頭がいいと考えている可哀想なやつ。
394 :
デフォルトの名無しさん :2005/10/11(火) 14:26:18
>>389 失礼しました。
staticJavaScripの方はそれでうまく行きました。
ありがとうございます。
ところで、validwhenのjavascriptはどうなりますか?
>>394 >validwhenのjavascriptはどうなりますか?
urlやvalidwhenにははじめっから無いよ。
「JavaScriptが用意されているべき・用意されていなければならない」って
思いこんでないかい?
397 :
sage :2005/10/11(火) 20:10:52
それが売りだと思っていたんだけど。 将来的にも実装される予定なし?
実装して、Contributeするのだ!w
399 :
380 :2005/10/14(金) 22:26:08
失礼しましたw <input type="text" name="search"> ですたw 要はフツーのサーブレットのように HttpServletRequestから入力フォームとか(GETなら)URL直打ちのを strutsでも取り出せる、という事で。
E・∇・ヨノシ <400ゲット♫
ヨカッタな
402 :
デフォルトの名無しさん :2005/10/26(水) 13:37:27
教えてください。 数値専用のテキストボックスをJSPで表示し、 それを受け取るActionFormに、Integer型のプロパティを用意しました。 ユーザーからの入力値を、未入力と0を区別して扱いたいです。 Integer型のプロパティを用意すれば、未入力の時にnullで、 0を入力した時は0をあらわすIntegerオブジェクトが格納されるかと思いました。 ところが、未入力でも0が格納されてしまいます。 未入力と0の区別をするには、Stringで定義するしかないのでしょうか?
>>402 > 未入力と0の区別をするには、Stringで定義するしかないのでしょうか?
そのとおり。元々リクエストパラメータは文字列で飛んでくるわけで、
そういう意味でもjava.lang.String型で扱っておいた方が何かと良い。
データモデルとして数値型や日付型で扱いたい場合は、アプリケーション側で
ActionForm→データモデルに変換するときに型変換するのがおすすめ。
JSFでは「コンバータ」という機能で入出力は文字列、データモデルは好きな型、
という仕組みになっている。
404 :
402 :2005/10/26(水) 14:32:24
>>403 うーんそうなんですかぁ。
せっかく変換できているのに、未入力を扱いたいがために、Stringにしなければいけないのは
なんだかもったいない気がします。日付型は書式が多様だから、Stringでも仕方ない気もしますが。
全部Stringにするんだったら、HttpServletRequest使っているのと、大差ない気がするんですけど。。。
(DynaActionFormも。)
RequestProcessorのprocessPopulateあたりを上書きすればいいんじゃない? と思ったがその後のバリデーションとかでぬるぽ吐きそうだな。 まあだったらアクションに入る直前に好きなマッピングに変えればいいしマジオススメ。
>404 業務で絶対に使用されない値(-1)を未入力値として定義して、 reset() の中で毎度その値でリセットする策はどうですか?
>>406 「未入力=パラメータが飛んでこない」ならそれでもいいけど、
テキストボックス等の場合はパラメータ値として""が飛んでくるので、結局0が入れられてしまうよ。
408 :
402 :2005/10/26(水) 19:21:31
特定値を未入力とみなすというのはアリですが、
>>407 のいうとおり、
checkboxとはちがって、パラメータが届くのでだめでした。
やるとしたら、
>>405 の方法を試してみます。
409 :
momomo :2005/10/26(水) 22:05:04
strutsでページの制御をしたいんですけど。。。 DBから100件とって1ページに10けんづつみたいな。。。 logicのlengthとoffsetでやりたいのに offset=""のなかにbean:writeつかうとえらーになるのは なぜですか???
> offset=""のなかにbean:writeつかうとえらーになるのは > なぜですか??? Struts以前にTaglibの勉強汁
>408 出来たら報告よろ
>409 ルーク、ELを使え
RequestProcesserのprocessPopulateをオーバーライドで、本来の処理をsuperで呼び出してから、 リクエストパラメータが””だったらnullを再設定したところ、 希望したとおりにプロパティがnullのままActionが呼び出されます。 validtorで、requiredを指定しても、プロパティがIntegerの場合には、0になってしまうため、 サーバーサイドのチェックでは、入力エラーにならなかったのが、 チェックでひっかかるようになりました。これはうれしい。 intRangeで範囲チェックすると、ぬるぽになるかと思ったのですが、 nullを設定すると、チェックボックスのように、送信されてこないのと同じ扱いになるらしく チェックすらされませんでした。
414 :
402 :2005/10/27(木) 13:15:20
期待した動作になったのはいいのですが、RequestProcesserを取り替える方法は、 他のRequestProcesserに変更したい場合などに影響がでるので、 Actionの呼び出し前か、Actionのexecuteの先頭で、処理したほうがいいのかなと思いました。 あと、RequestProcesserで、汎用的に""⇒nullの処理を行う方法が分かりませんでした。 BeansUtilsを使ってnullを設定する方法はないんでしょうか? だめならリフレクションを使って実装するしかないのかな。
416 :
402 :2005/10/27(木) 23:49:26
>>415 BeanUtilsにコンバーターを設定できるなんて知りませんでした。
StrutsでもBeanUtilsでActionFormを使っているので、これを使えば、RequestProcesserをカスタマイズしなくても、
BeanUtilsに独自のコンバーターをregistするだけでOKですね。
(でも他でBeanUtils使っている箇所があると、思わぬ影響がありそう?)
ということで、PlugInで起動時に、独自コンバータを組み込む方法にしてみました。
RequestProcesserを使うよりも、疎結合な点はいいと思いました。
417 :
402 :2005/10/27(木) 23:51:51
作ったPlugInjはこんな感じです。 public class MyPlugIn implements PlugIn { public void destroy() {} public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { ConvertUtils.register(new MyConverter(), Integer.class); } private class MyConverter implements Converter{ public Object convert(Class type, Object value) { if (value == null){ return null; } else if (value instanceof Number){ return new Integer(((Number)value).intValue()); } else { String s = value.toString(); if (s.length() == 0){ return null; } else { return new Integer(value.toString()); } } } } } ひとまず、これで目的は達せられました。色々とアドバイスありがとうございました。
>>416 >でも他でBeanUtils使っている箇所があると、思わぬ影響がありそう?
それがコワイ。すごくコワイ。
419 :
415 :2005/10/28(金) 00:06:13
>>419 読んでなかったです。。。じゃあやっぱりRequestProcesserを使って、
・ConvertUtils#register
・ActionFormの生成
・ConvertUtils#deregister
って感じになるのか。
>>420 今ソースないから確認できないけどRequestProcesserのどこかでBeanUtils.populate(ActionForm, Map)
使ってるところがあったと思うけど、その前後で使用するのがいいのかもね〜試してないからなんとも言えない
自分はBeanUtilsBean.copyPropertiesでしか使わなかったからね
フォームのプロパティのタイプをIntegerにするメリットがあまり思い浮かばないところではあるけど・・・
強いていえばbean:writeタグでpatternで金額が使えるくらい?(JSTLで代用が効きそう)
まあ、頑張ってくれ
>>421 BeanUtils.populate(ActionForm, Map)って
親のフィールドまで値を持ってきますが、これは仕様どおりでしょうか
strutsのどの処理よりも画面制御のチェックをしたいので、 filterを使用してこんな感じで実装しているのですが 問題ないでしょうか。 String sessionToken = (String)httpRequest.getSession().getAttribute("org.apache.struts.action.TOKEN"); String requestToken = (String)httpRequest.getParameter("org.apache.struts.taglib.html.TOKEN"); if (sessionToken == null || sessionToken.equals(requestToken) == false ) { httpResponse.sendRedirect(redirectUrl); return; }
Strutsで作成したWebアプリで、 FORM内容を送信した後、内容をアプリ側でチェックし、エラーだったら 元の画面に戻して、テキストフィールドやセレクトボックスの内容も元の選択した内容に 戻すという処理をするには、どの辺のサイトが参考になりますか?
それがStrutsの主な役目だからStrutsを扱ってるどのサイトでも。 よほどヒドイところじゃなければ。
質問させて下さい。 strutsで表形式のデータの入力をしようと思ってます。 一件のデータが user_id と user_name で、これに応じたクラスuserを作りました。 ActionFormでは フィールド List data = new ArrayList(); メソッド getData( int idx ){ while( data.size() <= idx ){ data.add( new User() ); } return data.get( idx ); } setData( User user) getAllData() のような感じにしてます。 で、表形式のデータにしてvalidateメソッドをかけたいわけですが、引数のHttpServletRequest からどのようにデータを取得すればいいでしょうか? 通常なら、textのnameをキーにするわけでしょうけども…
427 :
426 :2005/11/01(火) 21:47:23
自己解決しました。失礼しました。
ExceptionHandler内で、forwardはできないのでしょうか。
無理。1つのjspないで処理分けれ
すいません、質問です。 最近仕事が暇なので、空いた時間でフレームワークのソースを読んでみようかと思うのですが、 オススメのフレームワークはなんでしょう? ちなみにこれまで暇なときは、友人の進めでCOMMONSのソースを読んでました。
432 :
デフォルトの名無しさん :2005/11/14(月) 22:30:16
すみません。 strutsについて質問させてください <bean:write name="A" property="number"> でnumberを表示出来るのですが、表示させる際に number = 111333ならば 111-333の様に区切りを入れたいのですがどうしたら宜しいでしょうか? Beanにはデータベースから値を取得してセットしていますので <bean:write name="A" property="number"> で取り出してから、3桁区切りをしたいです。宜しくお願いいたします。
>>432 そのBeanにgetNumberString()とか作って、
そこで整形した方がいいんじゃない?
111,333とかだったら、format="###,###"でいけると思うけど。
validation.xmlを多人数で開発するいい方法ないかしら ファイル分けても誰かがミスってるとコンテナ起動しないし
ちっとも解決してないw
ミスは減るだろww
確かに基本的なミスは減るが、 それはまともなXMLエディタでも使えば達成できるからな。 nameがダブったりとかは防げないし。 唯一の解決法は、チームの全員に"CVSに上げる前にいっぺん動かして見ろチンカスが" という通達を徹底することではないでしょうか。
validator.xmlは1人で担当するとか エクセルマクロでなんとかなりそうだけど
質問です。
たぶん
>>426 と似ていると思うのですが、配列データを収めるFormのvalidateの仕方です。
public class Hoge{
private int id;
private String name;
//以下セッターとゲッター
}
public class HogeForm extends ActionForm{
private List hoge;
(中略)
public ActionErrors validate(ActionMapping mapping, HttpServletRequest req){
(???)
}
}
配列データはjsp内でイテレートで回しています。offsetかけているので一部順不同です。
出力されたhtmlを見てみると、<input type="text" name="aaa[1].id" value="1"/>
こうなっているのでvalidateメソッド内でreq.getParameter("aaa[1].id")としてやれば
取り出す事はできるのですが・・・この先どうすればいいでしょうか?
>>441 全ての配列でvalidateを。ついでにerror出たら表の右の方にerror表示を。
>>442 そのやりたいことの中で、お前ができない、上手くいかないいのは何なの?
取り出すことはできたんだろ?
ValidatorのintegerやintRangeはスペースだけの 入力の場合はエラーとされないのでしょうか?
445 :
デフォルトの名無しさん :2005/11/19(土) 17:25:57
validwhenて、空文字チェックや特定の値が入ってるかのチェック出来ないんでしょうか。
>>443 取り出すときに req.getParameter("aaa[" + i + "].id") で配列を取り出すとして、
いちいちfor文で回してたらものすごく処理が無駄な気がするのと、validateに引っかかった場合、挙動がわかりません。
447 :
デフォルトの名無しさん :2005/11/21(月) 11:02:00
>446 私はそんな場合はListの中身もValidatorFormかValidatorActionFormにしてます。 (ListはlazyListをつかってる) さすればfor文でまわさなくてもエラーメッセージを出力することが出来ると思うけど、 >440のやりたいことはむずかしいか・・・
448 :
worm :2005/11/22(火) 12:04:44
こんにちは。パラメーターのことで教えてください。Actionクラスからjspに 遷移するときのパラメーター文字列の乗せ方が、どうしてもわかりません。 掲示板を自作しています。掲示板は用途毎に複数存在しており、パラメーター 文字列で使用する掲示板を指定して表示を分けたいと思っています。 例えば bbs.jsp?tbl=free でフリートークの掲示板を表示する設計です。 掲示板の書き込みを行うなどでActionクラスへ遷移した後、Actionクラスから 再びbbs.jspを呼び出す際に、遷移先urlに対してパラメーター文字列を付加する ことは可能なのでしょうか?ユーザーがブックマークしやすいように配慮したい のです。 ご存じの方、おられましたらどうか宜しくお願いしますm(_ _)m。
449 :
worm :2005/11/22(火) 12:53:35
色々試しているのですが、パラメーター文字列とか以前に、遷移してもurlが Actionクラス名のままなんですね。困ったな…。
遷移と言っているが、Action→JSPは、 HTTPのリクエストが発生しているわけではないから(フォワード) ブラウザから見たら、1回のHTTPリクエスト。URLは変わらない。 struts-configの、ActionForwardにredirect=trueとすれば、 そのパスに、リダイレクトされるようになってURLもいい感じに変わるかと。 でも、再度HTTPリクエストすることになる。 無駄な処理だけど、URLを気にするんならしょうがないかと。
悪いこといわないからservletから勉強しなおせ
452 :
worm :2005/11/22(火) 16:04:37
>450 ありがとうございます。redirect設定が有ったのですね。ケースバイケースで 使ってゆきたいと思います。ありがとうございます。「遷移」、「forward」の 言葉は正しく使うようにいたします。 色々悩んだ結果、以下の処理で、意図した形には出来ました。 ・このページを呼ぶ前のActionクラスの最後で request.setAttribute("tag",user.getTag()); ・forward後、掲示板ページのトップで以下の記述 <logic:present name='tag'> <logic:redirect forward='bbs' paramId='tag' paramName='tag' /> </logic:present> もしもrequestに「tag」が有れば、パラメーターを付けて自身を呼び直す、 という事をやっています。 まどろっこしい気もするのですが、ひとまず解決のご報告で。
>446 わかってるとは思うが、一回ぐらいServlet APIのJavadoc嫁
最近strutsをいじってるんですが 良さそうな部分もあるとは思うけど、結構微妙なものな気がします。 少しズレた話題かもしれませんが、オープンソースのフレームワークで、認証やアクセス制限の機能が標準で備わっているものってあるのでしょうか? strutsにその辺期待してたら見事にすかされたみたいです。 とりあえずtomcatのFORM認証も使ってみたんですが、どうも細かい制御や判定がが入れられなくて、自分で実装したほうがマシな感じでした。 出来ればHttpServletRequest.isUserInRole()を使いたいんですが、tomcatで認証させない場合は filterとHttpServletRequestWrapper通して使うくらいしかないのかな?
ずれてるかもしれないけど org.apache.struts.action.RequestProcessorクラスの processRolesメソッドが近いのかな?
456 :
455 :2005/11/24(木) 22:03:12
言葉足らずだった・・・ org.apache.struts.action.RequestProcessorを継承してprocessRolesをオーバーライド
>>456 なるほど。
でもこれだと、ActionServletが呼ばれた時しか認証チェックされないかな?
ディレクトリ単位で制御したいって時はfilterになるのかなぁ・・・
>>458 というかこれはstrutsの問題じゃないですね。申し訳ない。
(しかし、tomcatとかのform認証はj_security_checkに飛ばす以外で認証完了する方法はないのでしょうか?
適当にソースおっかけたらorg.apache.catalinaの方まで処理がいってたから、tomcatの方をいじらないとだめなのかな。
とはいえ条件増やそうと思ったら結局自分で処理を実装するしかないか・・・)
サーバでJSPからHTMLを生成してクライアントに送る時の、 その生成したHTMLソースを知りたいのですがどうやったら取得できますか? いきなりの質問でわるいんですけど誰か答えてもらえませんか?
>>461 えと、サーバ側で取得する必要があってクライアントにいってからでは遅いです。
遅くは無いけど右クリック禁止にされてます。
折角答えてくださったのに言葉たらずだったせいで申し訳ないです。
ほんと不毛な質問だな・・ 横取り丸とかjmeterでも入れて、スレタイを1024回読み上げた後に氏ね。
>>462 じゃあFilter使ってHttpServletResponseをラップして取得
HttpServletResponseのどのオブジェクトに入ってるか判りませんでした。 JSPのコンパイルした結果みたいなのは入ってました。 Filterはurl-patternでjspを指定しました。
ごめ、取れてたw
>>464 ありがとう。
素直にFilterでやればよかったんだな。
processPreprocessを新たに定義して横取りしようとしてたんだけど、
Filterで取るほうがよっぽど楽だったよ。
「no one is leaving WebWork」をみて、WebWorkから誰もいなくなっちゃうんだ、と思った俺は英語負け組ですが、なにか?
JSPでtableの中に記述されている文字列をアクションフォームに 送りたいのですが、単純に<td>abc</td>とか書くと、もちろん 送られません。 今はhiddenタグを使って二重に文字列を書いてるんですが、 量が多くなるとサーバからの転送量も気になるので、1回書く だけでよい方法が知りたいです。 <div>タグとか使ってもうまくいきませんでした。 初歩的質問だと思いますが、お願いします。
hiddenタグがhtml:hiddenじゃなく普通のhiddenならスレ違い。 その程度の転送量が気になるのも別の問題あり。
html:hiddenタグのwrite属性でいけるんじゃない? そもそも入力項目じゃないならsessionで保持した方がいんじゃないか?
>>474 それってhiddenなのに表示できる方法があるってことですか。
予想外でした。調べてみます。
sessionで保持するというのも調べてみます。
ありがとうございました。
476 :
デフォルトの名無しさん :2005/12/01(木) 00:59:36
今のプロジェクトにアサインされて最近struts触り始めました。 いまいちお作法がわからないので質問させてください 今のプロジェクトの作り方としては たとえば登録処理を呼ぶにしても登録完了画面を表示するアクションにかいてあって 入力画面JSP→登録完了画面表示(&登録処理)アクション→完了画面JSP の順で処理していきます。 登録完了画面表示(&登録処理)アクションでは validateで登録チェックを行う ↓ executeで登録のビジネスロジックを呼ぶ ↓ 完了画面JSP表示 という感じです 登録処理と表示処理は別アクションて考えてたもんなので なので↓のようになるべきなのでは?と思っていますが 入力画面JSP→登録処理アクション→登録完了画面表示アクション→完了画面JSP 間違ってますでしょうか? 遷移先の表示アクションでバリデーションやビジネスロジック呼び出しが行われるのには違和感ありどぇす
>>476 私は後者だとオーバーヘッドが増えるだけでメリットが無いように感じます。
あと、今まで書籍なりWebなり、または他人のコードを見てきたなかで、
後者のような例を見た記憶はちょっとありません。
登録処理アクションを使用するのが複数あるならそれでもいいと思うけど 無いなら分ける必要はないと思われ
うちは割とPRGで作ってますが。
>>479-480 Post Redirect Getの略なのか・・・。
知らずにこのパターンでやってたよw
更新処理の時には役に立つね。
画面A → (Action1) → 画面B → (Action2) → 画面C という画面フローで、 画面Bの入力欄の初期値を、Action1で設定したいのですが、 画面BのActionForm(Action2のIN)のプロパティの初期値を Action1で設定することはできるのでしょうか? ActionFormのインスタンスは、どのタイミングで生成されるのでしょう?
Action1とAction2のnameに同じActionFormを設定しておけば、executeのActionFormに渡されてくるはず。
<スコープ>.setAttribute("<画面Bで定義しているform名>", 画面Bの使用ActionForm);
485 :
482 :2005/12/04(日) 22:03:22
レスありがとうございます。
>>483 Action1と2でActionFormを共有すれば確かに出来るのですが、
それだとまずい理由がありまして。
画面Aからは別な画面へも遷移します。(画面A→画面D→画面E)
ActionFormを共有すると、画面A、B、Dが同じActionFormになるわけですが、
画面Bと画面DはValidationの内容が違うので、共有できないのです。
>>484 Action1でActionFormのインスタンスを自分で生成して初期値をセットしておいて、
教えて頂いた形でsetAttributeすれば良いということですね?
>>485 >>484 の方法が確実だとは思うけど
> ActionFormを共有すると、画面A、B、Dが同じActionFormになるわけですが、
> 画面Bと画面DはValidationの内容が違うので、共有できないのです。
ValidatorActionFormを使って、画面毎にvalidation.xmlの定義を使い分ければ?
488 :
485 :2005/12/06(火) 01:04:29
>>487 ありがとうございます。
パス毎に定義できる方法のことでしょうか?
調べていてそれに気付いたのですが、業務フレームワークの制限で、
自由に作れないため、出来ませんでした。
application.properties行進して反映するのに再デプロイって・・・・それどうよ
行進
ValidatorFormでパラメーターをセットし終わった後に処理をしたいのですが、 reset()メソッドしか用意されていないのですね
resetメソッドだけで十分かと思うけど
reset()はパラメータをセットする前に呼ばれるメソッドだろ
ああ、ボケてた、スマソ RequestProcessorのprocessPopulateをオーバーライドくらいか
495 :
デフォルトの名無しさん :2005/12/29(木) 11:56:02
>491 ValidatorFormでパラメータをセットし終わった後というのは、POSTされてきたときの話と解釈した上で以下 1)パラメータセットの後の処理はValidateなので、ValidatorFormを継承したクラスを使用し、 validateメソッドのなかで、対象の処理をコールするロジックを加え、super.validate()を実行する。 2)strutsのRequestProcesser.process()の、processPopulate();をコールした後に手を入れ、 「おれはstrutsのコアをいじれるんだぜ」と鼻高々になり、みんなに叩かれる。 3)Formのsetterにごりごり実装する。 4)そもそも何をしたいのかスレの住人にさらす。 すきなものをおえらびくださお
496 :
495 :2005/12/29(木) 12:28:38
>494のやりかたが一番ですな。 processerてstruts-configに設定できるのか。知らんかった。
基本的なことかも知れませんが、手元にある本には書いてなかったので教えてください。 (1) ActionFormに定義できるプロパティはStringだけなのでしょうか? intとかIntegerなどはできませんか? (2) 画面に表示する場合、property="xxx.yyy" みたいな書き方が出来るようですが、 画面から入力する場合も、同じようにproperty="xxx.yyy と書いて、 form.getXxx().setYyy() が呼ばれてセットされたりしないのでしょうか? 試しにやってみたら出来たのですが、本には表示のことしか書いてないので、 これが正しい使い方かどうか自信がないのです。
>>498 1)問題なし, DynaActionFormで定義できるクラスは問題なし
2)セットされる、そういう使い方をする場合もある
500 :
498 :2005/12/31(土) 04:53:23
>>499 ありがとうございます。
すっきりしました。
>>498 なんか変な本だな。
ActionFormの主な役割は入力値の取得のはずだが。
filter内の処理で、strutsのActionMappingオブジェクトを取得する方法はあるでしょうか。 リスエスとに保存されているのかと思いrequest.getAttributeNames()でリストを検索したのですが 見つからなかったです。 filterの処理で、actionMappingのparametarを取得できないでしょうか。
>>502 あるわけねぇだろ。
Filterがリクエストを処理するのは、フレームワークに処理が移る前だってことぐらいわかってんのかよ?
>>503 説明不足でした。
filterはstrutsの処理の前ってことはわかっています。
filter内でstrutsのリソースにアクセスしたいだけです。
webコンテナ初期化
↓
srtuts初期化
↓
webアクセス
↓
filterでstrutsのリソースにアクセス。
*filterの初期化ではstrutsのリソースは必要ないです。
strutsのリソースは、アプリケーションスコープなどになかったので、
requestProsesserをカスタマイズして、
struts初期時にリソースをアプリケーションスコープに登録し
filterで参照する、などができるのかと考えていました。
ModuleConfigさえあれば、strutsの情報がいろいろ取れそうなので、 RequestProcessorをオーバーライドして、moduleConfigをどこかのスコープに登録し filterで参照するのはどうでしょうか
>strutsのリソースは、アプリケーションスコープなどになかったので
あるよ。
例えばデフォルトモジュールは、org.apache.struts.Globals.MODULE_KEY をキーにいsて
アプリケーションスコープに入っている。
>>505 はムダ。
>>506 情報を取得できました。
ありがとうございます。
ログインしていないときの不正アクセスの遷移先をactionマッピングに記述していたので
filterからデータを取得して、リダイレクトできるようになりました。
validateの入力チェックで、 フィールドがlistの時もエラーチェックは可能でしょうか。 エラー内容は全て同じです。 listはcommonsのlazyListを使用し、動的に生成しています。
>>508 できるよ。公式ドキュメントにサンプルもあるから参考に汁。
strutsのupload機能を使用しています。 strutsの処理ではないと思うのですが、 選択されたファイルのフルパス(クライアント側)を取得することはできるでしょうか。 uploadの画面遷移で ファイル選択画面→確認画面→アップロード実行画面 が要求されており、 さらに、確認画面からファイル選択画面に戻る処理があり ファイルを選択されている状態を復元しなければなりません。 ヒストリーバックは使用してはいけないよう要求されており、 どうしてよいかわからなくなりました。
ファイルを選択されている状態を復元は無理。 ブラウザの仕様。
>>511 ありがとうございます。
ヒストリーバックでも無理でした。
>>509 indexedListPropertys でできました。
但し、10項目あって3〜10項目に入力エラーがある場合、
4〜10項目のエラー処理が走りません。
10項目全てのエラー処理が、depends的な扱いになっているようです(見た感じで言っています)。
全項目をエラーチェックするように設定できるでしょうか。
>>510 アップロードするファイルのパスをサーバ側で設定できてしまったら、
それは重大にセキュリティホールになるってわかってる?
>>513 自己レスですが、下のサイトに上記は仕様との事が載っておりました。
自作メソッドを作るしかなさそうです・・・
517 :
デフォルトの名無しさん :2006/01/11(水) 01:06:03
Validateメソッドにチェック処理を実装しようと思うのですが、 validation.xmlに定義した内容でチェックされるときに実行されている、 Struts標準のAPIを使えないのでしょうか? 例えば、メールアドレスのチェックなどが使えればかなり実装が楽だと思うのですが。
>>516 選択されたファイルの、クライアント側でのフルパス(ファイルシステム上のパス)は取得できますよ。
ただし、IEかFirefoxのどちらかができて、どちらかはできない、という話だったと思います。
>>517 使えるよ。
・・・っていうか、使えばいいじゃん。何を聞きたいのかよくわからん。
StrutsのソースやCommons ValidatorのAPIドキュメント見ればすぐにわかる。
strutsのファイルアップロード機能で、 htmlの同じform内に、textとfile部品を含め enctype="multipart/form-data"でサブミットしているのですが、 textのデータがなくなってしまいます。 enctype="multipart/form-data"でファイルアップロードするときは 入力データは送信できないのでしょうか。
>>520 MultipartRequestWrapper
>>521 filterで処理しましてできました。
ただ一回処理するとストリームが空になり、
servletでパラメーターが取れなくなります。
JSPを表示するアクションを起動したら 突如途中までしか表示できなくなった… そのアクションは1回前に表示できたのだが どうしよう…アドバイスおながいしまつ
ログ見れ
525 :
デフォルトの名無しさん :2006/01/13(金) 19:17:02
kwsk
526 :
デフォルトの名無しさん :2006/01/14(土) 15:27:11
ActionでDBアクセスロジックを呼び出し、そのDBからの取得結果のオブジェクトをJSPで 出力しているのですが、JSPが生成したHTMLをキャッシュして、それをレスポンスとして 返す方法はあるでしょうか? Action内で結果のオブジェクトをキャッシュすることはできますが、オブジェクト キャッシュではなく、ページキャッシュ(?)をするのが希望です。 宜しくお願いします。
527 :
デフォルトの名無しさん :2006/01/15(日) 02:44:51
>>526 それは単純にJavaとかServletの機能ではないとおもう
キャッシュサーバ使うのが一番だろうけど、望みのことがしたいのであれば
javax.servlet.ServletResponseWrapperで出力を横取りして
キャッシュ(DBでも自前のロジックでも良いけど)に入れればいい
528 :
デフォルトの名無しさん :2006/01/15(日) 03:33:51
>>523 autoflushをfalseにして、bufferに十分大きい値をとってやれば解決するかも
<%@page buffer="32kb" autoflush="false"%>
とか、
何も指定しないと buffer="8kb" autoflush="true" なので、
生成されたHTMLが8kbを超えると勝手にブラウザに出力を始めてしまう。
validationの仕組みで、チェックメソッドのリターンは、次の検証ルールを実行するかの判断と思ったので Errorオブジェクトをセットして、エラーなし(true)でリターンしたら エラーありと判定され次の検証ルールに移行できなかったです。 エラーオブジェクトと戻り値で判断しているのですね・・・
再表示した時に 前回検索した結果のリストが表示してしまいます 再表示したときに前回の結果を表示させないようにするには どうしたら良いの? 大ハマリして大苦戦してるので アドバイスおながいしまつ
再表示ってどういう風に再表示よ? 再POST/GETなのか、ヒストリバック(ブラウザの戻る、Javascriptのhistory.back())なのかで対応違う
struts各クラスのログをコンソールに出力ためには、どのような設定をすればよいのでしょうか。
仕事でしょうがなく勉強してるけど Strutsタグがゴミすぎるので使いたくないな
まあ別に嫌ならrewriteとjavascript以外全部捨てても困らないわけだが。
536 :
533 :2006/02/03(金) 11:56:47
>>534 見てみましたがこれはすごくいいかも。
もうちょっと調べてみて使うかどうか検討します。
Strutsの<html:xxxx>タグではデザイナーとの協業は難しそう。
>536 Velocityは筋はいいけど、まともに使うなら自分でソースいじらないと使いにくいと思う。 そういうことできないなら慎重にしたほうがいいとおも
うちはもうデザイナーにはHTMLだけ書いてもらって、それに当てはめる形にしてる 協業形態にもよるが、いろいろとデザイナーにやらせるのは無理
ウェブコンテナを再デプロイせずにstruts設定ファイルを更新する方法で、 ActionServletのdestroy、initを呼び出すと初期化できました(まぁ当然ですが)。 これはかなり危険でしょうか?
540 :
デフォルトの名無しさん :2006/02/16(木) 00:12:37
<html:link>のタグで、複数の動的パラメータを送りたいのですが、 動的パラメータは、一つしか設定できないみたいです。 複数の動的パラメータを送る方法として Mapオブジェクトを使う方法というのがあったのですが、いまいち使い方がわかりません。 複数の動的パラメータをひとつの動的パラメータとして連結して送るってのは邪道ですか?
>動的パラメータは、一つしか設定できないみたいです。 そんなことはない >複数の動的パラメータを送る方法として >Mapオブジェクトを使う方法というのがあったのですが と自分で言っているように、おまいさんがわかってないだけ >複数の動的パラメータをひとつの動的パラメータとして連結して送るってのは邪道ですか? そんなことはない
Mapのキーにパラメータの名前を、値にパラメータの値を入れる。
以前あったreload.doに相当する機能はなくなったようですが、 他の手段があるのでしょうか?
>>543 コンテナによっては再ロード機能があるんじゃないかしら?
Tomcatなら「Tomcat Webアプリケーションマネージャ」で
[コマンド]-[再ロード]とか。
545 :
デフォルトの名無しさん :2006/02/17(金) 15:41:28
>>544 コンテナの再ロードは、セッションなどが破棄されると思うけど、
reload.doも同じなのかな?
Tomcatだとセッションをシリアライズして Session.ser に保管してくれるから サーバ立ち上げなおしてもセッション維持してくれるよ
547 :
デフォルトの名無しさん :2006/02/20(月) 17:38:26
ありえねー。 socketをTomcatごとき一介のアプリが一体どうやって保持するんだ。
そんな深い層でセッション維持はできねーよ セッションIDだ
>>546 の言っているのは、HttpSessionオブジェクトだろ
>>545 が言っているのが、そのつもりかは知らんが、ファイルの読み直しのためだけに、
再ロードするのも大げさだとは思う
Actionの中にはロジックを書くべきではないとよく聞きますが、 どこまではActionに書いてもいいのでしょうか。 パラメーターのチェック等は、今Actionで行っています。
>>550 パラメータのチェックならValidatorフレームワーク使おうよ。
>>550 階層化構造なんて意識しなくていいよ。
共通できる部分場あればその実装を書けばよし。
<html:form>タグ内に<% String a = "aaa"; %>を書いて、 </html:form>タグ後に<%= a %>をしたら、シンボルが解決できませんになりました。 これは使用でしょうか?
っ[スコープ]
>>554 formの中と外で、スコープが異なるのでしょうか。
jsp内だったら全てpageスコープと思っていました。
>>555 PageContextにsetAttributeされたものが、pageスコープ
>>550 人、現場によって見解が違うからこれというのは無いけど
フレームワークに依存する部分はロジック層まで降ろさないほうがいいんじゃないかとは思う
>>557 ありがとうございます。
ビジネスロジック層には、requestやsessionは渡さないほうがいいのでしょうか。
>>558 時間があればロジック層に渡すためのPOJOみたいなのを作って
そこにrequest・sessionで必要な値、オブジェクトを設定すればいいと思うけど
そういう処理を書くのが面倒ならそのまま渡してもいいんじゃないかな?
>>559 POJO<−>ActionForm間の値のやりとりはBeanUtils使えばいいのでは?
>>560 型安全性の低下とリフレクションの遅さに耐えられるなら、ね・・・・
リフレクションは言うほど遅いと思わないけど 型安全性の低下はかなり深刻。
>>560 POJOって普通のJavaBeanなのですか?
意味合いがいまいちわからないです。
validateでチェックメソッドを追加して、 DBアクセスをし、IDの重複があるかのチェックをしています。 この処理は、validateでやるべきなのでしょうか、 それともビジネスロジックでやるべきでしょうか?
>>565 ありがとうございます。
エラー表示するときは、ActionMessagesはActionクラスで処理しべきでしょうか。
それともビジネスロジックでしょうか。
>>566 ビジネスロジック層にStruts APIを持ち込むなよ
すいません。質問があります。 Dynaformbeanを使用していますが、JSPのELでDynaformbeanを使用すると プロパティが見つけられずエラーになります。 今はBeanMapでかぶせたので問題なく動いていますが、 DynaformbeanのままでELま無理でしょうか?
jspのforwardタグはglobalしか取得できないのでしょうか。 直前に実行されたactionのforwardを取得する方法はないでしょうか。
DIとかxdocletにも同じことを言えるけどね。
>>569 自己解決です。
requestURIを取得して、ActionMappingクラスから取得できました。
ActionMappingはアプリケーションスコープからモジュールを取り出して
何とか引っ張ってきました。
>>570 つーか、HTMLの仕様がばかげているんだよ。
こんな理いろいろ要求されているのに、
コネクションレスでのやり取りは無理だ。
根本的にHTMLの仕様の問題!
2.0ではフィルターが対応されるんだ。 楽になりそうだな・・
なんの2.0だ
>570 そこの元記事もコメント書いてる人も全部ズレてる気がしてならんよ。 設定外出し自体がなんで罪になるのかさっぱり理解できない。 俺は573氏の意見に賛同する。 複雑さを隠そうといろいろあがいた結果、より醜くなっていく。 View を Web でやるって発想がもう間違ってるんだよ。
VIEWにJSP、JSP+EL、JFS、velocityだったらどっちを選びます? おいらはvelocity!!!
Jsp2.0で十分 それ以上複雑してもメリットは見出せないし、デザイナとの連携が取りにくい。
>>581 べつにそこまでデザイナー優先にしなくてもいいじゃん。
アプリ側が大変になるんだったら意味ないだろ?ちゃんと考えてんの。
そーゆーのおおすぎ。
>>582 なぜデザイナに覚えろ、対応しろっていえないの。
デザイナ優先にしてあげたら、デザイナの仕事は一瞬にして終わるぜ。
俺が社長なら即講習会を開かせる。
ビューの技術ごときでアプリが大変になるなら、 それこそちゃんと考えて設計してないだろう Jsp2.0で十分というのも、そもそもカスタムタグ+ELを使ってても 構造が複雑になる画面ってのは、めったにない。 ロジックと比べて切り出すべきコンポーネントも数えられる程度で、 あえて構造化するメリットは見出せん。 というか重い>velocity
おれはきれいに設計するなんて考えは毛頭ない。 工数が掛からない設計をする。 バククソ言われても。 リクエストやらセッションやら何でもかんでも、どこでも持っていく。 最近のSE、費用があって開発するってもを忘れてる。 趣味じゃないのに。 リフレクション・MAPだってバリバリ使いまくりさ。 ActionFormもDB層まで持っていくし、 そのformの中にMapもたせて何でも持っている。 ただ、仕様変更で困ったことはもちろんない。 パフォーマンスは求められないが。
WEBアプリがどうこういうよりHTMLが嫌いだ
>>585 だいたいきれいな設計すると工数がかからない。
俺も一度Mapバリバリ使ってる独自フレームワークのプロジェクトに参加したけど、
フレームワーク作った人はいいかもしれんけど、他の人がデバッグする時にはさぁ、さぁ、大変。
工数を考えるなら、自分の受け持ちの分だけじゃなく、プロジェクト全体や他の人の費用も
考えてくれ。
>>585 まぁ、Mapやリフレクション使うなとは言わない。ただ、バランス良く考えてくれ。
で、例のプロジェクトで、何でもかんでもフレームワークがMapにデータをつっこんでいるから、
コンパイル時の型チェックは効かなくて、そりゃ、結合テスト時に、各開発者でエラー発生しまくり。
で、エラー修正するには、障害票切ったりなんだり、余計手間も増える。
トータルで見るとどっちがいいんだか。
実際のところPRGパターンと画面とビジネスロジックの遷移だけのシンプルなやつだけでいいんだよな 大規模なところはstruts多いけど、小規模は独自フレームワークやJSFが多い感じ JSFはツールが増えてきてstruts置き換えすると思う
>>587 Mapバリバリがよい設計に対しわかりにくいというのがそもそも納得いかない。
>>588 だから型エラー絶対ありきで考えるなよ。
つーか型エラーなんておきね。全部beanまたはStringなんで。 新でもInteger、Dateはもたね
>>592 それ最悪だな
日付データから前日とか1ヶ月後とか判定したいときには
都度DateFormatでparseするのか?
別にダイナミックな手法を否定はしないけど 変わりようがない部分にまでゴリ押しするのは勘弁して欲しい。 >ActionFormもDB層まで持っていくし、 (中略) >ただ、仕様変更で困ったことはもちろんない。 Webサービスにしてとか言われたらもうアウトじゃねーの? ロジックから下とビューを分ける気ないんなら Strutsなんて使わずにガリガリ書けばいいじゃん。 その方がソース読まされる方も割り切れて臨める。
>>593 入力ミスがあったら入力画面に戻って入力内容を表示、とかしようとすると
ActionFormのプロパティは全部Stringにならない?
いや、Strutsはちょっと試したくらいなんで、
実はintもDataも使えるCoolな方法があるというのなら教えて欲しい。
>>595 ActionFormはStringかboolean以外持たないのが普通
その時点で、View層以外には使えないと考えるのが普通
ActionFormの制限に合わせてDB層まで全てStringで統一するというのはあまりに無謀じゃない?
>>596 いやもちろん考えている。
DBはibatisを使用しているので、to_date、to_charで何も不便しない。
たまに途中で日付計算する必要がある場合はもちろんDateFormatで変換する。
jspでエラーになった場合に、global-exceptionのハンドラに遷移させることはできるでしょうか?
>>599 Strutsのリクエスト処理の流れを考えれば、基本的にはそれは想定外なことはわかるはず。
global-exceptionは、Actionのexecuteメソッドでの例外処理を想定している。
# かなりムチャすればできないこともないが・・・
日付の話が出ているので確認したいのですが htmlの日付文字情報をBeanにセットするときに、 確かConverterが使えましたが、 使用するのはDateLocaleConverterでよいのでしょうか。
>>601 自己解決。
ConvertUtils.register(new DateLocaleConverter(Locale.JAPAN, "yyyy/MM/dd"), Date.class);
System.out.println( ConvertUtils.convert("2005/11/10", Date.class));
System.out.println( ConvertUtils.convert("2005/11/10", Date.class).getClass());
>>602 但し複数フォーマット対応方法がわからず・・・
登録しなおししなくてもいけるのかな・・・
>>598 画面によって日付フォーマットを変えたいときには、一度parseしてからまたformatするのか?
あと、数値データで計算するときも、都度parseしてから計算してまたStringに戻すのか?
Struts Validatorを使えば、Actionに到達した時点で変換可能であることが保証されるのだから
Action内でDateや数値型にparseしてロジック以降の層に渡した方が効率的だと思うけどな
で、あとから「和暦で入力することになりました」とか言われるわけだ。
それは追加コストで
>607 それは知ってる。 けどcommons-validatorが対応する前に strutsどころかブラウザ使ってどうのなんて廃れてて、 リッチクライアントへ完全に移行されてると思う。 元号の記述フォーマット考えるだけで収拾付かなくなりそう。 mustangの和暦サポート自体は助かるけど。 Action内部で独自に検証するにしても全然楽になるし。
609 :
デフォルトの名無しさん :2006/02/25(土) 14:25:48
StrutsのActionFormになにを定義すべきか分からなくなったので 教えてください。(長くてすみません) こんな遷移を想定します。 ページ1→(aciton1)→ページ2 ページ1 検索条件を入力してaction1を呼び出す ページ2 検索結果が表示され、 使用した検索条件が表示のみされます(入力フォームではない)。 ActionFormはリクエストデータの入れ物として 使用すべきであって、レスポンスデータはActionFormではない方が よいのでしょうか?単なるDTOとして作成すべき? そのあたりで混乱してしまいます。 例えば上記の例では、 ・ActionForm1に検索条件のみ用意 ・検索結果を格納するBeanを別途用意 ・action1では、ActionForm1を使って検索し、Beanに結果を格納し、 request.setAttributeで渡す ・ページ2では、requestスコープのBeanを参照して結果を表示する (ActionForm1は参照しない) ページ2では、検索条件も表示のみする必要があり、 それはすでにActionForm1に入っているわけですが、 それもBeanに移し変えて使うべきなのか、それともActionFormを参照すればよいのか 分からなくなりました。
>つーか、HTMLの仕様がばかげているんだよ。 >こんな理いろいろ要求されているのに、 >コネクションレスでのやり取りは無理だ。 >根本的にHTMLの仕様の問題! じゃあそれを前提にさらに複雑なページフローをやろうとするstrutsは 基地外以外の何物でもないな。
>>609 ActionFormがFORMのパラメータを保持するBeanだと思えば
検索条件を表示するときは、ActionFormをそのまま利用すればいいんじゃないだろうか
612 :
609 :2006/02/25(土) 16:05:02
>>611 そうしてしまった場合、ページ2がaction1に依存してしまいますよね。
この例だけならば問題ないのですが、
別のactionでもページ2を表示する場合には、ActionFormも使いまわさないといけませんよね。
だから、表示は別のBeanで用意して移しかえることを考えたのですが。
actionで、バイナリ出力ストリームにJPEG形式で画像を出力しておいて、 それをJSPで利用する方法にはどうすればよいでしょうか? 漠然とした質問ですいません。
>>613 聞いているのは、出力する方法ではなく、利用する方法?
CGIのアクセスカウンターみたいに、imgタグのsrc属性で、そのactionを呼び出せばよいかと。
>>612 Struts-beanタグでもJSTL-COREタグでも、
requestやsessionにsetする名前と、beanのプロパティ名には依存するがクラスには依存しない
Mapのkeyをプロパティ名と合わせれば、Mapでも代替可能だし
ただし、表示するJSPのhtml:form配下のタグ初期化に使うのだったら話は別だけど
616 :
609 :2006/02/25(土) 21:19:35
>>615 プロパティ名は依存しなくても、form-nameは同じにしなければならないと思うのです。
JSP-ELの例ですと、
action1から表示する場合には、actionform1.hoge
action2から表示する場合には、actionform2.hoge
見たいな感じで。なんか間違っているかな??
ActionFormをrequestやセッションにセットするのって、
自動的にform-nameで入っているのを使わずに、自前で名前付けてsetAttributeするってことでしょうか?
htmlタグはnameを指定しない場合はActionMappingで定義されたform-nameのプロパティを見るけど bean,logicタグはnameで指定したpage,request,sessionのオブジェクトを見にいく 個人的にはActionFormは入力のプロパティだけもって、確認などで表示したい場合は別オブジェクイト で表示した方がいいかな〜とは思う ただし、別オブジェクトに設定する手間をどう考えるかは人次第だな
618 :
609 :2006/02/25(土) 22:31:24
Strutsとしては、別に決まっていないってことでしょうか。
別に間違いではなければ、
表示だけの場合はActionFormではなく、
他のオブジェクトにする方法で行こうと思います。
で、そうした場合にもう一つ質問です。
>>615 の最後で書いてあるような、
表示するページ(ページ2)の入力フィールドに初期値を入れるには、
そこに相当するActionFormを、actionでnewしてあげて、中身を突っ込んでから
form-nameでsetAttributeすることで確認できました。
ActionFormはあくまで「formタグ内のinputタグの値を入れる器」と考えて、
こうしたのですが、こんな感じでいいのかな?
619 :
613 :2006/02/26(日) 02:30:34
>>619 <html>
<head><title>Strutsの前にHTMLを勉強しようよ</title></head>
<body>
<h3>チャート</h3>
<img src="chart.jpg" alt="チャート"/>
</body></html>
>>620 それだと1画面で複数グラフができないんです。
Strutsの話でもねーなこれ
>>621 <html>
<head><title>Strutsの前にHTMLを勉強しようよ</title></head>
<body>
<h3>チャート</h3>
<img src="chart1.jpg" alt="チャート"/>
<img src="chart2.jpg" alt="チャート"/>
<img src="chart3.jpg" alt="チャート"/>
</body></html>
625 :
デフォルトの名無しさん :2006/02/27(月) 18:50:44
626 :
デフォルトの名無しさん :2006/03/01(水) 00:00:09
質問です。 struts-configのactionマッピングに、validate=falseと指定しても、 クライアントのJavaScriptの入力チェックが動いてしまうのですが、そういうものなのでしょうか? クライアントからstruts-configを参照できないので、分からないでもないのですが。。。 同じActionFormを使った2種類のActionで、片方はvalidate=true、 もう片方はvalidate=falseと指定しようと思ったのですが。。。
コメント無視することが出来ないばかりで、かなり痛い人に見えてきましたね >選択するのはユーザであって、フレームワーク開発者が押し付けることじゃない。 コレはさすがにひどい それぞれコンセプトの違うフレームワークを、ユーザーが選んでるわけだが。 なんでも出来るものを作ったとしても、複雑すぎて使い物にならないこと位分かるだろうが。
ロッド・ジョンソンの発言とされる 「strutsなんてなかったほうが良かった」ってのは ejb の間違いじゃないっけ? struts でも言ってたの?
>625 そのものズバリじゃないけれど 「struts LazyList」でググって見ると 良い例が出てくると思うよ。
なんで「そもそも Web がクソ」にたどり着かないんだろう?
>>629 そりゃネタでしょ
「○○なんてないほうがよかった。○○のせいで2,3年が失われてしまった。」
というパターン。
633 :
デフォルトの名無しさん :2006/03/02(木) 11:53:55
>630 たしかにLazyは昔使ってたけど、validation.xmlによるvaludationを行う際にきちんと 画面の再表示ができるようにbeanのスコープをsessionにした瞬間から Lazyは不要となった。 スコープsessionはクソだって? もちろん画面遷移時にsessionのゴミ掃除をするフレームワークを作ったよ。 最初はStrutsクソだと思ったけど、 valudation.xmlをちゃんとつかえるようにする(ボタンごとに異なるvalidationで、 validation後もhidden項目を使用しないで正常に前の状態を保持する) struts-cfg.xmlは設定をカスタマイズ(Tokenとかサブウィンドウ表示とか) ビジネスロジックはスレッドセーフにする ビジネスロジックは概ね画面単位、メソッドはボタン単位 PropertyUtilsもいろいろカスタマイズ strutsのjspタグはほぼ全てカスタマイズ(次の10件、並べ替え、変更チェック、権限制御等) トランザクション制御は1箇所で行う(DBMSには依存しない) request、responseはビジネスロジックから隠蔽 こんな感じのフレームワークを作ったらStrutsも悪くないと思えるようになった。 製作コストの関係で後でPMに怒られたけど。 しかしめげずに設計情報から自動生成するフレームワークまで昇華させる。
当スレの633は、struts を Web 開発に使用した際、 標準の状態ではロクなアプリが作れないことを発見した。 これでは開発に使用しても効率は上がらない。 (中略) その結果ついに、Struts も悪くないと思える程度のフレームワークを開発した!! 一方ロシアはJWSを使った。
635 :
デフォルトの名無しさん :2006/03/02(木) 17:06:55
>634 JWSってJavaWebServiceか?
>>627 てか、ぎゃーぎゃー言うほどStrutsって難しいか?
癖はないし素直だし、全然簡単だと思うのだが。
下手に妙な機能に手を出すから、おかしいことになる。
長い間拡張されてきたフレームワークってな、何でも
できるようになっているのだからあれとこれを組み
合わせて云々とかやってしまうと難しくなるのは
あたりまえ。
その辺をとりあげて複雑だとか言われてもねぇ。
>>636 複雑っていうか、過剰に手間がかかるのを批判しているだけかと。
「なんでHelloWorld1つ動かすのに、あんなにいっぱいクラス作ったり、XMLファイル書いたり、
Struts以外と互換性のないタグ使ってJSP書いたりしなきゃならないんだよ?
マンドクセー」
Struts自体を複雑で困難と思ってる人はいないんじゃないかな。
マジレスすると、 HelloWorld一つ動かす目的でStrutsを使う方が悪い。 適材適所。 自分の用途に合わないってだけで あるプロダクトを悪と決めつけるのは、 もう、アフォかと。
strutsがgetのパラメータをbeanにセットするのは、BeanUtilsやPropertyUtilsを使用していると思うのですが そのときに、htmlエスケープの入った文字をアンエスケープして、 パラメーターからプロパティーを分割し、beanにセットしていると思いますが、 エスケープしてbeanにセットするクラスがあるのでしょうか。 RequestUtilsをみてみたのですが、わからなかったです。 なぜそんなことを調べているかというと、 アクセスURLを履歴で取ってあり、その履歴の処理を再実行する必要があり 自力でURLをbeanにセットする必要があります。 &でsplit、=でsplitをしていたのですが、<や、値に「=」が含まれていて プロパティ、値 に分割できません。
>>638 「うんうんもっともだ」とか言って、したり顔で同調するような
らいとうぇいと族が、ぶろがーには多いしなー
でも決定権のないコーダーの愚痴は愚痴として聞き流して
やりゃいいじゃんとも思う
>>639 デコードしているのは、Strutsではなくサーブレットコンテナ、つまりTomcatとか。
求める機能は標準APIにもあって、java.net.URLEncoder、URLDecoderがそれ。
JIS第1,2のみ可能な入力チェックをする必要がありますが、 正規表現で使用していますが、JIS第1,2の文字コード範囲指定をしてOKかと思ったのですが、 SJISとunicodeの文字に対する文字コードの大小が異なり苦しんでいます。 何か簡単な方法はあるでしょうか?
第1,第2がゆにこに変換された後の文字コードを正規表現で指定するんだ
>>643 byte化して、SJISでチェックするのは?
>>637 Hello Worldってのがどれくらいのものを指しているのか
分からんけど、最低限action要素とactionform要素を
1つづつ書いたstruts-config-xmlを用意して、
jspファイル一つ置くだけで実現できんか?
web.xmlはサーブレット系全体で必要だから、
strutsのせいじゃないので除外。
……いや、ていうか、1ページならjspだけでいいじゃん。
だってAction実行なんか不要だぜ?
というわけで638に同意。
648 :
デフォルトの名無しさん :2006/03/04(土) 01:40:03
似たようなActionクラスを何十個も作る時、 Template Methodパターン使ったらすげーはまるんじゃねーかな、と ふと思った25の夜だったんだが実務でやった奴おらんかね。
>>648 結構やってる人は多いと思うが、どうしたの?
(実はTemplate Methodパターンをさっき知ったことは秘密だw)
Template Methodパターンとはちょっと違うかもしれないけど、 ログインしてるかどうかをチェックする基底クラスを書いて、その中からもう一つのexecute呼ぶってのは使ってる。 public abstract class LoginUserAction { public ActionMapping execute(なんちゃらかんちゃら) { ログインチェック; ログインしてなかったらログイン画面へ; return executeConcrete(なんちゃらかんちゃら); } public abstract ActionMapping executeConcrete(なんちゃらかんちゃら) { } } で、これを継承して、executeConcreteだけ普通に書けば、ログインチェックは済んでる、っていう算段。 僕も結構やってる人が多いと思う。 たださ、これをやってると、だんだんDIしたくなってくるのなw 前処理、中間処理、後処理(Viewをつくるとか)で、自由な組み合わせすると、継承じゃ無理になってくるから SpringFrameworkとか使ったら楽しいのかなぁ、と思ったり。
executeConcreteの宣言は、 public abstract ActionMapping executeConcrete();でした。
>>650 まさに同じことを思ってDI使った
ログ出力とか、Actionの実行権限チェックしたいときとかに使ってる
StrutsのAction自体が継承で色々バリエーション持ってるから、
継承で作っていると最終的に行き詰ってしまうんだよね
>HelloWorld一つ動かす目的でStrutsを使う方が悪い。 >適材適所。 その適所が見つからないという話なんだがな。
>ログインしてるかどうかをチェックする基底クラスを書いて そんなものはAOPでやっちまえってのが最近の流れだと思う。 継承はなるべく簡素にしないとあとあと泣くことになる。
ログインチェックはFilterでやるか、RequestProcessorを使ってやるのが定石。
>>653 HelloWorldを引き合いに出してちゃ見つからんだろうね
ログインチェックを、Actionでやると ActionからActionへのForwardでもチェックされることになるから、 Filterでやるべきだと思う。
そう言えばServlet2.4の仕様では、forwardに対してもfilterかけられるんじゃなかったっけ?
strutsを使用すると、Actionにくるときには必ずセッションが生成されるものなのでしょうか?
DBから取得したデータを コンボボックスの項目として表示したいのですが やり方がわかりません。 どなたか教えて下さい。
661 :
660 :2006/03/08(水) 00:11:04
配列よりArraylistを使うのが一般的なんでしょうかね。
>>659 > strutsを使用すると、Actionにくるときには必ずセッションが生成されるものなのでしょうか?
Sturts二回目の俺の認識だとそうではないと思う。
Sessionの管理はStrutsの仕事ではない。
初回ログインの認証に通ったところで
HttpSession session = request.getSession(true)
と新規にsessionを作り、sessionの中にユーザ情報なりを詰めておく。
あとは毎回のアクションのロジックに入る直前で
HttpSession session = request.getSession(false)
してチェックしてる。
って、実はよく分かってない。
エロい人の解説希望。
org.apache.struts.action.RequestProcessorのprocessLocale()メソッドで
HttpSession session = request.getSession();をしている。
Struts1.2.8のソースコードでは609行目。
ここは、Struts設定ファイルの<controller>でlocale="false"を設定していない限り
すべてのリクエストが通る処理なので、この時点でHttpSessionオブジェクトが作られる。
というわけで、
>>659 の「strutsを使用すると、Actionにくるときには必ずセッションが生成されるものなのでしょうか? 」
という問いに対しては。「YES」だ。
ついでに言うと、
>>662 の
> あとは毎回のアクションのロジックに入る直前で
> HttpSession session = request.getSession(false)
> してチェックしてる。
も無意味だな。通常、ここでfalseは返らないだろう。
>>663 ありがとうございます。
localeの処理でセッションがどうしても必要だったんですかね・・。
>>665 java.util.Localeオブジェクトを一回だけ作ってSessionに入れ、
その後は「このセッションのロケールはこれ!」って判定を前提に
作られているフレームワークだから。
strutsの入力チェックはcommonsのvalidationを使用しているので、 strutsのvalidation設定ファイルは、BLからでも使用することはできますでしょうか。 画面で入力できるデータを、CSVで登録しなければならず 画面で同じチェックをするのに、チェックロジックを流用したいと思いまして。 CSVからマッピングするクラスは、validationで定義してあるbeanと同じです。
667です。自力で試しているのですが、何とかできそうです。 ただ、Servletでorg.apache.struts.validator.Resourcesが必要なのですが、 こいつの取り方を教えていただけないでしょうか。
>>668 自分で見つけました。
String prefix =
ModuleUtils
.getInstance()
.getModuleConfig(request, application)
.getPrefix();
return (ValidatorResources) application.getAttribute(
ValidatorPlugIn.VALIDATOR_KEY + prefix);
>>664 エロい人、サンクス。
ソースあとで読んでみます。
ところで
> > あとは毎回のアクションのロジックに入る直前で
> > HttpSession session = request.getSession(false)
> > してチェックしてる。
>
> も無意味だな。通常、ここでfalseは返らないだろう。
「ここでfalseは返らない」とはどういう意味でしょうか?
>>670 すまん。「nullは返らない」の間違い。
画面で、年、月、日を別々なプルダウンで作成する(こうしなければだめって言われた)とき javasciptで、YYYY/MM/DDのデータを作成して、サーバーにサブミットするか 3つの部品としてサブミットして、javaで日付を作成するか、皆さんでしたらどちらですか。 また、もっと便利な方法はあるでしょうか?
673 :
デフォルトの名無しさん :2006/03/14(火) 10:49:26
>672 カレンダー出したほうがわかりやすいですよ。 と客先にレビューしてみてはどうか。 ソースはMyFaceあたりからJavaScriptの部分ぱくればOKか? まあ、もし672の方法だったら、MMの部分でDDのデータは可変に かわるじゃん?可変にしなけりゃいけなかったらJavaでやったほうが らくにつくれない?(というのはJavaScriptが苦手な人の発想か?)
ActionFormに以下のフィールドがあり、sub_2_itemは内部管理項目として持っています。 sub_1_item sub_2_item htmlからは、sub_1_itemしか転送されないようにしているのですが、 セキュリティーテストで、わざとGETのパラメータでsub_2_itemを渡し、 その後の処理でエラーになってしまうという、お恥ずかしい状況になっています。 strutsのpreffix、suffixがよくわからないのですが、 sub_2_itemのGETパラメータが来ても、sub_2_itemを更新させない方法はあるでしょうか?
675 :
デフォルトの名無しさん :2006/03/14(火) 19:52:47
>674 CustomRequestProcesserクラスをつくって、doGetをオーバーライド なんてだめだよねー。全ての画面でdoGetつかえなくなったらまずすぎるよねー
>>674 getter、setterの名前をパラメータ名と違うのにして、
プログラム内からは普通にそっち使ってアクセスすればいいんでないの?
パラメータ名と一致させなきゃsetter呼ばれないんじゃなかったっけ。
>>676 説明不足でした。
セキュリティーレビューをしていまして、
ActionFormのフィールで、画面からPOSTパラメータで送信されるもの以外のフィールドがあり、
故意にGETパラメータでその値を送信した場合、簡単にユーザーによってデータが改ざんされてしまうため、
そこをブロックしなさい、といわれています。
フィールドを消すべきだとはわかっているのですが、ソース数が多く
別の方法はないかと考えていました。
無意味なことをやめろと進言するほうが早いな。 中途半端な知識ほどタチ悪いものはない。
>>677 「POSTも偽装できますよ」と言って、office氏がACCSのサイトに対してとった手口を示して、
その提案が無駄なことを伝えましょう。
GETかPOSTかに関わらず、パラメタは全チェックが基本でしょう。
TextSS のWindowsXP(Professional)64bit化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
結局、Strutsにしろ、JSFにしろ、プログラマはほとんど「使い方」を覚えるだけに なって、つまんね。
>>681 JavaEEも.NETもそんな感じだね。
既に用意されているものの使い方を覚えて、組み合わせるだけ。
自分で作っているという実感がだんだん薄くなってきている。
JSFはまだ組み合わせるだけで何でもできるという域には達してないと思うけど あれこれカスタムなんたらを作る楽しさはあるんじゃないの そして後日俺様フレームワークだと非難される罠
strutsから離れて3年(当時は1.1bだったかな)経ったおれが戻ってきましたよ
なんか sturts-share と struts-action に分かれるだの、webwork と統合するだの
最近の状況を教えてくれ。
http://struts.apache.org のトップページを斜め読みすると、以下のような認識であってますか?
・action とか forward とかを、struts-action フレームワークで管理
・GUI 周りを、compornent-based な JSF をつかった struts-shale フレームワークで管理
このようにした理由:
・GUI に、既存のテンプレートエンジン等を使っている人は
struts-action を使ってくれ
・JSF とかが好きな人は、両方使ってくれ
>>684 ・従来、Strutsフレームワークと呼ばれていたもの・・・Actionフレームワーク
・JSFベースで作った全く新しいフレームワーク・・・Shaleフレームワーク
ってだけ。
strutsのbean:defineのidで定義した変数は、jspの<% %>で使用できますが、 独自defineタグのタグリブを作成し、doEndTagでpageContext.setAttributeしているのですが、 タグリブ直後に、<% %>内で、setした変数を使用すると、コンパイルエラーになります。 bean:defineはどのように変数を定義しているのでしょうか?
>>686 オープンソースソフトウェアなんだから、そういう時こそソース見ろよ
>>687 すいません。もっともで。
1.2.7で、252行目で単純にpageContext.setAttributeしてました。
やってることは同じなんですが・・・・どうしてでしょうか。
ずれてるずれてる。 >687死ね
htmlで"のエスケープ文字はありますが、'はないのでしょうか。
>>690 明らかにスレ違い。下手すると板違い。
"のエスケープ文字が、&quot;(を半角化したもの)だというのであれば、
答えは「ある」。後はググれ。
春だからな
"
ちと質問だが、 ページA→ページBという遷移の際に、 ページBの表示が出来ない(たとえば表示対象が削除された等)場合、 ページAに戻して、エラーメッセージをページ上部に表示する、 という場合、どうやればきれいにやれるかな。 URL末尾にページAを表示するためのURLをだらだら付けるのは いやだし、セッション使うと複数ブラウザ開いたときにおかしくなる。 refererも必ずついてくるわけじゃないしね。 strutsでこういうがエラーハンドリングをやりたい場合の 定石ってある?
>>694 actionのinput属性使うって話じゃなくて?
それともページAっていうのが何種類もあり得るって話なのかな?
>それともページAっていうのが何種類もあり得るって話なのかな? そそ。例えば掲示板なんかで、記事に返信をするときに、 返信元記事が消えていれば、返信リンクを押す前に 戻りたいわけね。で、返信リンクはいくつかのページから 飛べる、ような感じ。 ちなみにactionのinput属性というのがよくわかりまセン。
いや、validateの方法ではなく、例外的なページ遷移をうまく さばけないかってことなんなんだが……。
A1,A2,A3 ... An という複数の画面から B に遷移する可能性があって、 どの Ak から遷移してきた場合も、元の Ak に戻したいってことですよね。 URLに Ak を示す情報をエンコードするのもダメ セッション使うのもダメということなら Ak と対になる Bk をそれぞれ作るしか無いのでは?
StrutsでCSRF対策って何をしておけばいいのでしょうか? TransactionToken使えばいいの?
>>700 TransactionTokenだけでは不十分。
Strutsだから、という特別な対策方法はない。
Strutsを使っていない場合と同じと考えて良い。
全てのActionに入る前に適切な権限コントロールを行うに尽きる。
>>702 CSRF対策という点では、それじゃ不十分だろ。
「適切な権限を持った正規のユーザ」に不正リンクなどを踏ませるなどして
意図しない操作を誘発させるものなんだから。
>>703 その通りだった。すまん。
必要なのは、画面遷移(Actionの遷移)が適当かどうかを判断することってことでいいかな。
Webアプリを作ってるとJSPを作成するのが面倒なんだけど、自動的に作成してくれる ツールとかないかな? struts-config.xmlとかActionFormとかを参照して。 プログラムを書くのはいいけど、HTMLを記述するのが苦痛でたまらん。
706 :
デフォルトの名無しさん :2006/04/13(木) 17:57:08
>705 Excelで画面イメージを作ったら自動的にJSPに変換するExcelマクロつくってみた。 出来上がったJSPは手を全く加えずに正常動作するのだ。 一応会社では結構みんなに使われてる。 それを君に差し上げたいが、著作権とかの問題でむりぽ。 StrutsConfigからJSPのファイルとFormタグ程度を作成すればいいのであれば ExadelStudioとかができるよ。 Hibernateにも対応していていいかんじ。
708 :
デフォルトの名無しさん :2006/04/18(火) 11:09:05
>707 とりあえず自宅マシンのデスクトップに配置しとくよ
strutsのvalidationの修正を反映させるのは、再デプロイをするしかないのでしょうか。 ファイルのタイムスタンプを見て、ファイルが新しくなっていたら再読み込みとかの処理を割り込ますことは可能でしょうか。
>>709 ValidatorPlugInを拡張してそういう機能を持ったプラグインを自作すれば?
711 :
デフォルトの名無しさん :2006/04/21(金) 14:30:17
Struts1.2で struts-config.xmlの data-sourcesに DB接続設定を書きたいのですが どう書けばいいのかわかりません。 教えてください!!!
713 :
デフォルトの名無しさん :2006/04/21(金) 15:56:37
今勉強がてら strutsを触っているのですが、 submitしたとき、 クライアント側では <html:javascript>によるチェックロジックは自動生成されるくせに、 サーバ側で DynaValidatorActionFormの validateメソッドが自動で呼ばれないのですが そんなことってあるんですか?
action-mappingのvalidateが無いまたはfalseになってるってオチはないよね?
>>713 DynaValidatorActionFormってところが怪しいな。
validation.xmlの<form name="">のところに、
ActionFormの登録名を書いてるとか。
DynaValidatorFormではなく、DynaValidatorActionFormの場合は
ここに書くのはpath名なのだが。
716 :
713 :2006/04/24(月) 10:38:47
レスありがとうございます。
struts-config.xmlの該当部分はこんな感じです。
cancellable="true"で dtdのエラーが出てるのが気になるといえば気になるのですが。。。
書いておかないと html:cancelが使えないので書いてます。
<action path="/testupdate" name="frmTest" scope="request" validate="true" input="/testForm.jsp" type="foo.bar.TestAction" cancellable="true">
<forward name="update" path="/testForm.jsp" />
<forward name="false" path="/testForm.jsp" />
</action>
で、validation.xmlがこんなの。
<form name="/testupdate">
<field property="item1" depends="required,maxlength">
<arg0 key="item.item1" />
<arg1 name="maxlength" key="${var:maxlength}" resource="false"/>
<var>
<var-name>maxlength</var-name>
<var-value>3</var-value>
</var>
</field>
>>714 バッチリ trueです。多分。。。
>>715 多分これで正解ですよね?
struts-config.xmlの form-beanの定義は org.apache.struts.validator.DynaValidatorFormって書いてますが、これは関係ないですよね?(DynaValidatorActionFormにしても同じでした)
strutsのvalidatorって、サブミットやリンクするときに、xxx?page=-100とかやると素通りになるよね。 てことは、validatorでpageチェックもすべき。そのときpageパラメータのpageはint中の一番マイナス名数字にすべき?
struts vs JFS どう思います? strutsに慣れてるんで、JFSの利用価値がいまいちわからん
>struts vs JFS どう思います? 無意味な比較に感じる。 もうじき Web で画面作ること自体が忌避されるようになりそうだし。
>>719 まあ「もうじき」といっても1年やそこらのスパンじゃないと思うので、
無意味ではないと思うけどね。
>>718 はJSFのスレに行ってみるのもいいかもね。
721 :
713 :2006/04/26(水) 10:32:12
713の問題、解決しました。 jspで <html:form action="<%=StringUtil.concat("/test", nextAction) %>"... というように strutsタグに jspタグを埋め込んでいるのですが、どうやらこれがマズい模様。 ベタ書きすると validatorが呼ばれます。 両者とも生成される htmlには違いがないのに、なぜ挙動が異なるのかは不明です。 教えてエロい人。
>>718 StrutsはURL単位での原始的なやりとり
JSFはボタンなどのコンポーネントにイベントを書いていく
とまったくの別物
デザイナーにHTMLつくらせるならJSFはちときつい
かといてstrutsでもカスタムタグとかガンガン埋め込むのも修正時に開発者が死ぬ
一番いいのはループ以外EL式にしてここにこういうテキストを表示しておいてください
と指示するのが一番
デフォでHTMLエスケープされれば完璧だった>EL
<c:out>とかだとデザイン時文字が見えないからね
通常のテキストであれば大きい文字なのか色がついてるのかすべてすぐに理解可能
JSP2.0からは便利なVelocityとして使うのがよさげ
その場合は JSP 使わずに Velocity が良い。 JSP は欠点が多すぎると感じる。 もともとコード書けるものに対して、 後付でテンプレート的なもの(ELやタグ)が加わった感じ。
感じ感じって、おめぇの気分の問題なぞしらぬわい
Velocity 1.4は、log4jと混ぜて使うとメモリリークするよ。
マジディスカ
velocityはちとテンプレートで問題が出る ELのエスケープをはさめるのはいいのだが デザイナが使うのは9割はDreamWeaverだが、これはJSPをきれいに対応していて 静的なHTMLとまったく同じ開発が可能だ ま、いろいろとやると自分でフレームワーク使って作ったほうが早いという結論に たぶんほとんどのプロジェクトでこの辺自作してるよね commonsのel使って。
strutsってなんですか? それよりTOMCATがどうやって動いているのか知りたいんですけど、 どうしたらいいんですか
>>722 JSFはELがでる前に話題になったのでしょうか。
ELを考えると、JSFの利点がないように思え・・・
ELが出た後のJSFは必要性はさほどないのでしょうか?
JSF、JSFと話題は聞きますが、実際に使用しているプロジェクトがほとんどないので・・・
新しい風を感じる
ELはJSFの置き換えになるという意味がワカランのですが
まずキミはどこをどう読んでそう解釈したのかを語ってみてくれ
JSFとELを比較するという感覚が理解できん
>>722 をよんでそういう考え方が出てくるってすばらしい
これぞニュータイプ
もうJSPは飽きたっていうか、嫌だ
JSPでいいよ。いつまで使えるかもわからん変なタグ覚えたくない。
ループ以外のカスタムタグは負け組み
質問でふ。 strutsのメッセージリソースはjspの中でbean:messageタグで利用できますが、 カスタムタグの属性として表示文字列が含まれる場合、リソースから取得するために 式を書かんといかんと思うのです。 <hoge:hage value="<%=・・・%>" /> みたいな。 この場合、適切な方法はどうなるのでしょうか。 ResourceBundle.getBundle("application").getString("fuga") とかそんなのしか思いつかんのですが。 プレースホルダは使わないのでとりあえずこれでもしのげるのですが、 jspの暗黙オブジェクトとかを使えばもっと上手に取得できるんでしょうか? どうか知恵を貸してください。
カスタムタグの属性として表示文字列が含まれる場合 ってのがよくわからん。kwsk
わかりにくい表現になっちまいましたみたいで申し訳ないです。 タグの属性の値としてメッセージリソースを使おうとした場合、 いつもどおりのbean:messageを使えないじゃないですか。 そのときどうやってリソースを取得するのがベストなのかなあという 質問でして。 だから、カスタムタグじゃなくてもいいんです。 たとえば、 <input type="submit" value="(ここにリソースを使いたい)"> みたいな。 でもこの例はhtml:submit使えばbodyにbean:messageタグ書けるから 適切じゃないかもしれん。 とりあえず、今問題に直面してるのは、 他の人が作ったカスタムタグの属性に、表示される文字列が存在する。 そこで表示される文字列にメッセージリソースを使いたい。 そのためにはタグの中にタグ書けないから式で表現しないといけない。 どうするのが最適? まあ、こういうことなんです。 意味不明な部分があったらいくらでも補足します。よろしくです。
>>741 普通のHTMLタグの中ならbean:messageタグは使えるので、
その例は適切ではない。
たしかに一部のカスタムタグのvalueなどでbean系のタグが使えなくて
困ることは時々ある。
Strutsが管理するMessageResourceだったら org.apache.struts.Globals.MESSAGES_KEYをキーにして applicationスコープにorg.apache.struts.util.MessageResourcesオブジェクトが入っているから RuntimeExpression使ってapplicationスコープからMessageResourcesオブジェクトを取り出し、getMessage(キー)。
beanタグはもう忘れてしまったが、JSP2.0とJSTLの組み合わせなら fmtタグでリソースの内容を変数にsetした後、ELを使って属性内に記述できる。 fmtタグはweb.xmlにデフォルトのロケールとリソースファイルを登録できるので、bean:messageタグとほぼ同じ使い方が出来る
746 :
デフォルトの名無しさん :2006/04/28(金) 10:53:55
>739 <bean:define id="xxx"> <bean:message key="fuga"/> </bean:define> : : : <hoge:hage value="<%=xxx%>" /> こんなんでいいんじゃない?
>>746 だから、page=-1111とかってやると、エラーチェックかからないよ。
>>746 以前に、貧弱すぎ。
748 :
デフォルトの名無しさん :2006/04/28(金) 18:52:27
>747
>
>>746 > だから、page=-1111とかってやると、エラーチェックかからないよ。
application.propertiesの文字列をとってるだけなのになんでエラーチェックの話になってるの?
749 :
739 :2006/04/28(金) 23:42:25
>みなさま 回答ありがとうございます。 とりあえず、>743さんの方式でMessageResourcesを取得することにしました。 特に全部タグじゃなきゃヤダということもないので、これで行こうと思います。 ただ、これだと、ロケールの指定をしない場合、 bean:messageタグとMessageResources#getMessageでは ロケールの解決方法が違うのか、ブラウザの言語設定をチョコチョコ変えながら ページを表示すると挙動が微妙に変わります。(リソースの言語が混在する) bean:messageタグがデフォルトで使用するLocaleは request.getSession().getAttribute(Globals.LOCALE_KEY)とほぼ等価な雰囲気 なのですが、このAttributeがセットされるタイミングがどこにあるのかわかりませんが、 とにかく上記のロケールがちゃんと取れない(nullなのかしら)場合があるようです。 bean:messageと同じ挙動に寄せたいのですが、ソースを読んだ感じだと RequestUtils.なんとか(失念)Localeというメソッドが使用されてるようでした。 引数のpageContextってのがよくわかってないので、何物か調べるところで時間切れ。 夢のゴールデンウィーク入りです。 とりあえず運用上の問題になるような部分ではないのでそこまで気にはしませんが、 残りの疑問は大型連休明けに積み残します。 とりあえずみなさまの意見がだいぶ役に立ちました。ありがとうございました。
751 :
デフォルトの名無しさん :2006/04/29(土) 21:20:49
>750 なにこれ?どんな要件で使うのかな?
>>751 StrutsアプリをASP.NETに移植するときとか、Struts開発者使ってASP.NETで開発するときとか・・・???
すごい狭いターゲットだな
754 :
デフォルトの名無しさん :2006/05/02(火) 09:04:41
>752 ASP.NETの案件でちゃんとMVCモデルで作りたいときじゃないの?
>>754 なるほど。
そのワリにはあまり注目されてないみたいだねコレ。
NAntとかNHibernate、Spring.NETなんかだと結構日本語の記事あるのに。
.NETでMVCって需要ないんかね?
>>755 ASP.NETそのものがMVCだとMSは主張しているが・・・。
まあ、スレ違いなので適当におしまいにしようや。
探せばまだまだある。 commons-transactionだって使えるぞ。 ファイルの追加、削除、リネームをして、 ヤベ、戻したいっと思ったときにロールバックをかけるときれいさっぱりに。
log4jの設定変更を、アプリの再デプロイなしで適用することは可能でしょうか?
>>759 Configurator.configure呼ぶだけでOK。
スレッドセーフ気をつけろよ。
Actionクラスってシングルトンでインスタンス変数禁止だったの? 知らなかった・・・やべ
762 :
デフォルトの名無しさん :2006/05/12(金) 10:15:47
>761 インスタンス変数は禁止である。Actionクラスは複数のスレッドから呼ばれ、かつスレッドセーフではないから。 シングルトンではない。コンストラクタがpublicなのだから。 チミは誰からシングルトンだと教わったんだ?(see RequestProcessor.processActionCreate() )
せめてサーブレットわかってからstrutsやれ javadoc位読め
>>762 GoFパターンのシングルトンパターンそのままのコードじゃなくても、
インスタンスが常に一つしか生成されないものをシングルトンインスタンスと言うんだよ。
おまえ、DIコンテナとか使ったこと無いだろ?
あまり幼稚なこというな。 第一、常に一つしか生成されないってどこに書いてある?
>>765 > 第一、常に一つしか生成されないってどこに書いてある?
つ ソースコード
>>766 正確には、RequestProcessor一つにつき一つだな。
Actionインスタンスをフレームワークに生成させないで、
アプリで勝手にnew()していたら話しはまた別だが。
DIコンテナがRequestProcessorを拡張してActionを生成している場合 シングルトンではなくてリクエストやセッションスコープになっていることもあるな JSFのManagedBeanになると、リクエストパラメータをフィールドに持ってるからシングルトンではないし 結局、Actionをシングルトンにする意味ってあったのだろうか?
>>768 できるだけオブジェクトの生成回数を減らしたいというだけかと。
>>769 でもActionFormBeanはリクエストごとに生成されるんだよね?あんまり意味なくない?
>>770 短命オブジェクトは新世代GCで負担少ないから問題なし
>>771 それならActionも同じじゃね?今はActionをSingletonにしているけど、
SingletonにせずにActionFormと同じようにリクエストごとに生成しても
いいわけじゃん。
短命オブジェクトは負担かからないなら、Actionも短命にしてしまえばいい。
ActionFormが短命でActionが短命でないというのがよくわからん
それから新世代GCってすごそうな名前だな。世代別GCの間違いだとおもうけど。
new世代のGCとold世代のGCだから間違いではない
>>770 ActionFormBeanはアプリケーション初期化時に一回作られるのみだ。
・・・って揚げ足取りスマソ。混同するからActionFormと書いてくれ。
ActionFormとは別にorg.apache.struts.action.ActionFormBeanという
フレームワーク内部コンポーネントが存在する。
それはさておき、ActionFormはインスタンス変数に
リクエスト毎の値を保持する必要があるからリクエストスコープになっている。
リクエストスコープオブジェクトは必要最低限。
毎回のリクエスト時にインスタンス生成しなくて
よい物はできるだけインスタンス生成の回数を減らす。
基本的なアプローチだと思うよ。
何も考えないと殿堂入りしやすくなってFullGC発生しやすくなるから注意な
>>773 「新世代GC」なんてだれもいわない。「世代別GC」と「新世代GC」でぐぐってみろ。
なるべく正しい用語をつかってくれ。
世代によって動くアルゴイズムかえれるだろ
778 :
デフォルトの名無しさん :2006/05/29(月) 23:35:50
質問です。 画面A→B、C→Bというような遷移がある時、Bの表示に必要なデータの 生成をする責任はAAction、CActionに存在すると思うが、そうするとBの表示のために 必要なデータの収集処理が重複してしまう。 こんな時みんなどうしてる?
>Bの表示に必要なデータの >生成をする責任はAAction、CActionに存在すると思うが この前提が間違い。B表示用のActionを作れ。 ちなみに、全角英文字を使う時点でエンジニアとしてのセンスを疑われることも覚えておけ。
A画面、B画面から呼び出される処理がまったく同じものであれば共通のActionを使えばいいし 処理としては別だが同じロジックがある場合は、Actionから呼び出すService層のクラスや、戻り値のBeanを共通化すればいい
781 :
デフォルトの名無しさん :2006/05/30(火) 00:06:55
> A画面、B画面から呼び出される処理がまったく同じものであれば共通のActionを使えばいいし 明らかに別の画面の場合は共通Actionにするのもどうかなと > 処理としては別だが同じロジックがある場合は、Actionから呼び出すService層のクラスや、戻り値のBeanを共通化すればいい Service層を使う件は検討したんだけど、そうするとそのServiceって特定の画面用になってしまって画面と本来疎結合にしたいのに 関係が出来てしまわない?
A画面→AAction→DAction→C画面 B画面→BAction→DAction→C画面 ってのもありかな
783 :
デフォルトの名無しさん :2006/05/30(火) 00:59:54
> A画面→AAction→DAction→C画面 > B画面→BAction→DAction→C画面 > ってのもありかな この場合AAction→DActionのパスは <forward name="d" path="d.do"/> でDActionに委譲することになると思うんだけど、A画面からC画面に パラメータが欲しい時に無理だった気がする... たしかrequest.setAttribute("dForm", dForm) してもdFormのデータが有効にならなかったと思う。
784 :
デフォルトの名無しさん :2006/05/30(火) 01:29:12
今のところ自分は CForm nextForm = new CForm(); nextForm.setAnyParma(anyparam); request.setAttribute("cForm", nextForm); return new CAction().doDisplay(mapping, nextForm, request, response); とやって重複ルーチンが出来ないようにしてるんだがどうもしっくりいかない。 もっとスマートな解決策を知っている人情報求む。
>>783 気がする
だったと思う
やってから言えよ。おまいの書いたことは全部できるよ。
AActionやBActionでActionFormに何か値をセットしても
それはクリアされてしまい、DActionで取り出せない点は注意が必要。
そこでS2Strutsですよ。 ボタン押下時のActionと画面表示時のActionを簡単に分けることができる。
787 :
デフォルトの名無しさん :2006/05/30(火) 20:56:51
> AActionやBActionでActionFormに何か値をセットしても > それはクリアされてしまい、DActionで取り出せない点は注意が必要。 783はまさにこの話
788 :
デフォルトの名無しさん :2006/05/30(火) 21:02:11
> そこでS2Strutsですよ。 > ボタン押下時のActionと画面表示時のActionを簡単に分けることができる。 サンクス。まさにこれを求めてた。 しかしアドインフレームワークが無いと出来ないというのは少々悲しい。 様々なフレームワークで混沌としている当業界の中で、S2Strutsが長生き してくれれば良いが...
>>787 「A画面からC画面にパラメータが欲しい時」の話じゃなかったのか?
Strutsってエラーが起きたとき HTTPステータスの400番,500番台をクライアントに返すことが出来るのでしょうか? 単純にJ2EEAPIのresponse.setStatus(int sc) で大丈夫なのでしょうか? つーかそのときにマッピングファイルとかにもどり文字を何書きゃいいのかわからん "error"にしてマッピングしてもエラーページ表示するときはHTTPステータス自体は200番台になるし・・・ 内部でどのようになっているのかわからないものでStrutsの想定される使い方以外の事やると心配です
>>790 例外を投げたら、struts-config.xmlにglobal-exceptionを指定しない限り、、
勝手に500エラーになったかと。
指定したURLがなければ404エラーになるし。
内部でどのようになっているかは、せっかくソースが公開されているんだから、
読んでみてはいかが?
>内部でどのようになっているのかわからないもので ソースコードは公開されてるぞ。 response.sendError(int sc);でいいだろ。 Actionのexecute()からは return null; だ。
>struts-config.xmlにglobal-exceptionを指定しない限り、、 指定されてんだよ既に >ソースコードは公開されてるぞ。 いちいち見れんもんで聞いている >response.sendError(int sc);でいいだろ。 response.setStatusがだめな理由は? >Actionのexecute()からは return null; だ。 信用していいんだな?
>いちいち見れんもんで聞いている 見ろよ。回答者はおまいの使いっ走りではない。 >response.setStatusがだめな理由は? ステータスコードをセットするだけか、レスポンスのフラッシュをするかの違いだ。 そんなことも知らないのか。 >信用していいんだな? 信用できないならやらんでいい。
これまたずいぶんと失礼な質問者が現れたな。釣りか荒らしか?
ビジネスロジックの意味がわからないよー
<html:text property="boke[0]" />
(;´Д`)ごめんなさい。途中で押しちゃった ///JSP側//// ボケ1:<html:text property="boke[0]" /> ボケ2:<html:text property="boke[1]" /> //TestAction (ActionForm)// private List bokes = new ArrayList(2); //resetメソッドが使えないのでコンストラクタを使う public TestAction() { for(int i=0; i<2; i++) { bokes.add(""); } } public List getBokes() { return bokes; } public String getBoke(int i) { return (String)bokes.get(i); } public void setBoke(int i,String s) { bokes.set(i,s); } と、こんな感じなんですが、例えばボケ1にテキストを入力してsubmitして自分自身に フォワードさせてもボケ1のテキストフィールドには空白が入ってしまうのですが どうすれば良いでしょうか?Strutsは1.2.9です
ボケって・・・w
800 :
798 :2006/06/22(木) 19:49:23
よく見たらpropertyがbokesになっててgetBokesしか発動してませんでした こんな盆ミスで2時間も掛かるなんて_| ̄|○
801 :
ひゃぁ :2006/06/22(木) 20:56:41
663のstruts設定ファイルの<controller>で具体的にどこのことをいうのでしょうか?
ぐぐれ
このスレで言うことじゃないかも知れんがStrutsは1回やったらもうええかな。 自分はサーブレットプログラムをStruts + Hibernateから入った。 MVCの型を覚えるという点で良かったが、それ覚えたらフレームワーク無しで 組んだ方が効率よいと思う。
>>803 言いたいことはわかるが、業務なら他人がよく知っている方法を使うのも重要なこと。
フレームワークを使う意味はそういうところにもある。
805 :
803 :2006/06/23(金) 14:27:52
うん、チームでやるならね。 とくにスキルが見込めない人間とやるならStrutsをとるよ。
>>805 未来永劫自分でメンテすることを確約するならともかく、
他人がメンテするかも知れないことも考えろよ。
807 :
803 :2006/06/23(金) 15:41:33
未来永劫は仕事はないよw 拡張やバグ取りが必要なまで付き合うよ。 てかStrutsで書いたからってメンテナンス制が高いとは思わない。 設定にいろいろ逃がしてあるとソースレベルデバッグで追えない部分が増えるしね。 むしろ人のメンテする身になったらフレームワーク無しのが良いかな。
Strutsのメンテナンス性が高いとは思わないが、 他人の自己流設計・自己流実装を解読するのもイヤ。 オリジナルのカスタムタグとか使われると最悪。 Strutsを使っている方が、少なくともVC層に関してはどこで何をやっているのかがわかる。
>>808 他人の自己流だけじゃなく、過去の自分の自己流を読み解くのもたいがい大変だしね。
別にStrutsじゃなくてもいいけど、フレームワークなし、って言う選択肢はどうかと思うな。
で、知らないフレームワークを調べるよりは知ってるStrutsのほうが楽と。 これだけ普及してるとそういう人が多いので、このような側面がますます強調されることになる。 今となっては、Strutsそのものが優れているとは全く思わないのだが、 普及しているフレームワークを使うことにはそれなりのメリットがあるとは思う。
スキルが見込めない人間なら尚更Strutsをやらせるのは 大変じゃないかと思うんだが気のせいか Struts使うならCの部分だけでいい まあ、かゆい所に手が届かない場合はカスタマイズしないといけないけど 最近流行?か知らないけど複数のフレームを使ってxmlファイルが増えていくのだけは勘弁
812 :
803 :2006/06/23(金) 21:21:45
はー、今、他の誰かが書いたコードレビューしてるが、 もう全部jspにプログラム書いてるのね。 DBの接続から何から何まで。O/RもMVCもあったもんじゃない。 前言撤回するよ(´・ω・`) 自分で作るときは、ちゃんとフォーム送信したのはFormクラスに入れて Actionクラスで裁くようにしてる。 jspでは、Beanの取り出しだけ。
ワロタ それはフレームワーク云々より共通認識に問題なんじゃないかと
>>812 すごいなw
Tomcatとかソースコードの最大ステップ数とか制限があったんだが
大丈夫なのか?
JSPは展開されると偉い行数になるからなぁ。
815 :
803 :2006/06/25(日) 01:40:21
ちなみにサーブレットクラスは1個だけあった。 service()関数でrequest.getParameter("MSG")してswith case。 WndProcかよ。
JavaWorldに書いてあったんだけど、WebWorkってStrutsに吸収合併されたの? 今後どうなってくんだろう。
818 :
デフォルトの名無しさん :2006/07/01(土) 20:57:05
デザイナ不在でプログラマが全部一人で作る場合、Struts導入しても意味無いですか?
>>798 >(;´Д`)ごめんなさい。途中で押しちゃった
なんでかしらないが、勃起した
>>818 Struts使うか否かの論点は そこではないと思う
Struts使うケース * 多人数開発 - やり方を統一できる * 期間が半年以上で、Servletプログラミング初心者 - Strutsを覚える期間がある - ウェブプログラミングでのMVCのありかたを学べる -- PHPとかにも応用可能。
>>818 自身がStrutsに慣れていれば使うがいい。
他のフレームワークに習熟しているのならそれでもいい。
HTMLのサニタイジングやセッション維持のためのURLエンコーディング、TransactionTokenなど、
自分で実装したら結構めんどいから、何かしらのフレームワークは使った方がいいかも。
つーか飽きた struts-config書くの面倒 ActionとActionFormをいやいや継承 誰かRESTアーキテクチャでPOJO的な感じのフレームワーク作ってくれ ついでにビューはJSPとJSFも飽きたので JAXB2.0辺りを旨く使って新たなデザイン考えてくれ
826 :
デフォルトの名無しさん :2006/07/15(土) 00:54:55
詳しい皆様に質問です。 検索結果などの一覧表のページから詳細画面に遷移するにしたいのですが どのように実装すればいいのでしょうか? たとえばユーザ一覧のページから ユーザIDのリンクを押したらユーザの詳細画面に遷移するような場合 <html:link action="/UserInfoQueryAction" でユーザIDを飛ばして、UserInfoQueryActionでそれを取得するには どのような実装が良いでしょうか?
GET使えばいいんじゃね
一覧をListで出してるならindex、MapならkeyをActionに投げればいんじゃない? っていうかStrutsと関係あるのかとふと思った
829 :
デフォルトの名無しさん :2006/07/15(土) 01:08:03
>Actionに投げればいんじゃない? Actionに投げればいいのはわかるんですが どうやって投げて、どうやってAction側で取得するのかがわかりません。 すれ違いなら申し訳ないです。 どこで訊けばいいでしょう?
Struts使う前に、普通のWebアプリ勉強したほうがよくね?
俺もそう思う
画面表示時にリンクにパラメータ埋め込めばいいんじゃないの? GET嫌いだからhtml:linkとか使ったことないけど。 >Actionに投げればいいのはわかるんですが >どうやって投げて、どうやってAction側で取得するのかがわかりません。 う〜ん、Struts以前の問題だね。 @itあたりで基本から勉強した方がいいと思う。 答えはもう出てるけど、他でマルチポストとかしないようにね。 すぐにばれて叩かれるよ。
>>833 別にマルチなんかしてないです。
余計なお世話どうも
Javascriptでパラメータ渡してポストしても良くね?
なんかもーStrutsのなにがいいのか よくわからん。 struts-config.xmlのうっとうしさはなんとかならないのか?
今時新規でStrutsはねえよなあ。保守案件ばっかじゃね?
>>839 2年くらい前からそう言われてたが・・・
JSFの時代って本当に来るのか?
Ajaxとの相性もイマイチだし、リッチクライアント時代にはサーバサイドでイベントドリブンなJSFは過剰機能じゃね?
Strutsを使う程度でいいなら代替はJSFでいいと思うよ。 Strutsよりもシンプルだし、Strutsで悩んだいくつかの問題は改善されているし。 JSFならではの高機能(という謳い文句)に過剰な期待は要注意だけど。 とは言ってもぼちぼち使われ始めるのが JavaEE5対応のアプリ鯖・開発環境が出そろう今年後半から来年じゃない?
strutsのカスタムタグの利点がよくわからないです。 struts-html以外は、JSTLで置き換えるとして、 struts-htmlもサニタイジングすれば、普通にHTMLタグを使ってもいいんでしょうか? <input type="text" value="${fn:escapeXml(myForm.field1)}" /> htmlタグと似て非なる、struts-htmlタグを覚えたり、使わせたりするのが大変です。 <option>とかは、値からselectedつけてくれるので楽だけど。
velocity使えばいいじゃない
ときにStruts 1.3.0って今どういう扱いなの? ActionにSpringみたいにset-propertyできるようになるのが魅力だけど いつまで経っても公式公開されないのは何故?
>>845 ちょうど今、dev-ml に流れてきた。
1.3.5にしてもいいか?って聞いてる。
Subject:
Status of 1.3.5
From:
Paul Benedict <
[email protected] >
Date:
Fri, 21 Jul 2006 21:30:54 -0700 (PDT)
To:
Struts Developers List <
[email protected] >
Is 1.3.5 ready to roll? I think everyone has done a fabulous job. I haven't participated in this release but I've watched the boards to know. So is it ready? -- Paul
---------------------------------
See the all-new, redesigned Yahoo.com. Check it out.
>>839 >>840 しばらくの間、新規案件でJSF使いまくった挙句、懲りてStrutsに戻りました。
JSFみたいにいろいろと隠蔽されると気持ち悪いし、原因追求に時間がかかっていかん。
>>847 >いろいろと隠蔽されると気持ち悪いし、原因追求に時間がかかっていかん。
まあ、これは新技術が普及するまでは避けて通れない問題だよね・・・
ノウハウ不足とか、標準仕様に無い部分での実装間のバラツキとか。
「こういう場合はこうするものだ」という定石もないから試行錯誤の連続だし。
敬意も込めて、
人柱乙。
>>848 Strutsもそういう時期があったのかねえ。
1.0のころはほとんど知らんのだが、そんな感じだったのか?
>>849 Strutsの場合は実装=仕様だから
「標準仕様に無い部分での実装間のバラツキ」ってのは無かったけどね。
「定石が無くて試行錯誤の連続」はあったな・・・
Servletが出てきた頃も結構バラツキがあった。
JSFもだけど、EJB3もかなり苦労させられそうな悪寒。。。
851 :
デフォルトの名無しさん :2006/07/24(月) 02:53:29
画面遷移でのformデータの受け渡しについて質問です。 1〜4は間違っていますか? 1.JSPに<html:text〜があれば、submit時にActionFormのsetXXXX()が呼ばれる 2.JSPに<html:text〜があれば、表示時点でActionFormのgetXXXX()が呼ばれる 3.JSPの記述が<input type="text"〜なら、ActionFormは使用しない 4.JSPの記述が<input type="text"〜でも、Action側のrequesut.getAttribute()で値を取り出せる (Formには入らない)
>>851 1. △ setterが無い場合はリフレクションが使われる
2. △ getterが無い場合はリフレクションが使われる
3. × ActionFormにsetterがあればsetterが使われ、無い場合はリフレクションが使われる
4. △ ActionFormにsetterがあればsetterが使われ、無い場合はリフレクションが使われてFomに入る。
それでももちろん、Action側のrequesut.getAttribute()で値を取り出せる。
853 :
デフォルトの名無しさん :2006/07/24(月) 03:43:19
この時間に即レスありがとう。 <html:text〜 と <input type="text"〜の違いってどこにあるのでしょうか。 setterがあればどちらでもFormにセットされるってことですか。
>>853 >setterがあればどちらでもFormにセットされるってことですか。
その通り。リクエストパラメータとして送信されている時点で
カスタムタグかどうかの違いはないからな。
大きな違いは、表示時にgetterが呼ばれるかどうか。
>>851 の2.だな。
>JSFの時代って本当に来るのか? 来ないと思う。 Flash/Swing/.NET・・・ いくらでもリッチな選択肢があるのに 今更 JSF かよって感じ。 これから3年くらいはプアなWebアプリを リッチなやつに作り変える案件ばっかだろう。 単純なものはStrutsとかWicketとか。 そうでないものはFlashなりSwingなりで。 JSFの活躍する場所なんてないよ。
>>855 >単純なものはStrutsとかWicketとか。
StrutsつかうぐらいならそこはJSF使うだろ。
>>856 Struts経験者は多いけど、JSF経験者はそんなにいない。
859 :
html:checkboxのデータ保持 :2006/07/27(木) 12:04:43
struts1.2.9で開発しているのですが、チェックボックスのhidden格納がうまく行きません。 hiddenで保持しなければいけない理由はタブ切り替えのページでして、両方のページ にチェックボックスがあるためです。 また、一覧の件数によって最大値が変わってくるのも困っている理由です。 Formの型は配列で指定してます。 private String check[]; jspではこんな感じで一覧リストを回している所にhiddenとして保持したいのですが・・。 <logic:iterate id="list" name="AForm" property="list" indexId="idx"> 表示部はこんな感じです。 <html:checkbox name="AForm" property="check" indexed="true"/> よろしくお願いします。
フレーム切り替え?
861 :
html:checkboxのデータ保持 :2006/07/28(金) 10:31:07
value値をセットしていなかっただけでした。 ありがとうございました。
WebSphere5.1で開発をしているのですが、 同一名称のFormBeanを使用しているパッケージを同時に起動させると 最初に読み込まれたパッケージのFormBeanを次のパッケージでも使用しています。 同一サーバー上で起動するパッケージでは、FormBeanの名称を替えないといけないのでしょうか?
>>862 です。
途中で送信してしまいました。
いろいろググってみたのですが、同一現象の報告は見つかりませんでした。
ご存知の方がいらしたら、よろしくお願いします。
「パッケージを同時に起動」とか「次のパッケージでも使用」とかわからない。 WebSphere用語? 標準仕様の用語で質問してくれ。 パッケージと言ったらJavaクラス名のパッケージしか思いつかない。
パッケージじゃなくて、プロジェクトでした。 すみません・・・・
>>865 アプリケーションサーバの設定で、
異なるアプリケーションでは別々のServletContextを作成するようにする。
WebSphereはよく知らんが、大抵のアプリケーションサーバは
ServletContextを複数アプリケーションで共有するか否かを設定で選択できると思うよ。
>>866 ServlerContextの設定ですか・・調べてみます。
起動時の動きを調べてみたところ
DynaActionFormClassで使用するフォーム名をすべてHashMapに取得しているために
そこで同じ名前のFormがHashMapに取り込まれないみたいです。
>>867 Tomcatだと、crossContext="true" だったりするのだが。
WebSphereだと・・・わからん。スマソ
iterate 詳しく載ってる本ってありますか? iterate使って画面を表示する方法はのっているけど、 画面からiterateされたフォームのサブミットされたデータを 取り出す方法が載っているものが全然ないです。。
setHoge( int i, String str )でセットされるようにしておけば getHoge( int i )で取れるだろ
>>869 オライリーのStrutsクックブックにあったよ。
ちょっと前に実装した。
たしかJSPをこんな感じに書いた。
<logic:iterate name="parentForm" property="nestedFormList" id="nestedForm">
<html:text name="nestedForm" property="bakeratta" indexed="true" />
</logic:iterate>
↓で、下が生成されるhtml。
<input type="text" name="nestedForm[0].bakeratta" />
<input type="text" name="nestedForm[1].bakeratta" />
<input type="text" name="nestedForm[2].bakeratta" />
<input type="text" name="nestedForm[3].bakeratta" />
>>871 で、そのフォームの送信を受けるActionFormの実装方法は?
ちょっと想像つかない・・・
>>872 ん?
↓文書で説明しようとしてめんどくさくなったのでてきとーに書いた。
setterよりindex番号付きのgetterの方がポイントね。
public class ParentForm extends ActionForm {
private List<NestedForm> nestedFormList
= BakerattaLazyList<NestedForm>();
public NestedForm getNestedForm(int i) {
return this.nestedFormList.get(i);
}
public void setNestedForm(int i , NestedForm child) {
this.nestedFormList.set(i , child);
}
}
LazyListで自動拡張可能なListにしないと
logic:iterateで動的にネストの数が増えた場合に対応できないよ。
874 :
872 :2006/08/17(木) 23:47:21
875 :
869 :2006/08/18(金) 08:33:21
>> 873 ありがとう。あとでためしてみます。 クックブックですか。 JAVA 5だ。。 LazyList?? 調べてみます。。
俺はHashMap使って実装したな
>>871 が面白そうなのでやってみた。
nestedFormがスコープにないって言われた。。
struts難しいよ。
そだね、むつかしいね。
Strutsって簡単だからって勧められても、
JSPやらServlet知らないのにね。
エラーの意味がさっぱりわからんよ。
>>877 ネストしてある場合、setAttributeの前に、
ちゃんとListにサブFormデータ入れてから、ListをFormに格納して、setしないと、
サブFormを参照しようとしたときに、スコープにないって言われるよ。
Formにsetterつくって、サブFormのデータを突っ込むと、
自動的にListにaddするように作っていたら、これにはまって
ずっと使えなかったよ。
結婚したい。
ちょっと待て最後の呟きは何だ
>Strutsって簡単だからって勧められても、 ちょっと待て。「簡単だから」って勧める奴なんているのか? 正直めんどいけど、普及しているやり方だから仕方なく ってのが現状じゃないのか?
開発効率が大幅にアップするという理由で広まったはずだが?
シンプルなものをちょっと作る場合には簡単 凝ったものをいっぱい作るともうダメ
>>882 シンプルなものをちょっと作る場合は、結構めんどくさいと思うのだが・・・。
比較的シンプルなものをたくさん作る場合に威力を発揮すると思われ。
ただし、struts-config.xmlとかが膨らんでしまうわけだがorz
【レス抽出】 対象スレ: △△まだまだStrutsの良さを教えてくださいSession4 キーワード: JSF 抽出レス数:49 Struts厨はJSFをライバル視しすぎwwwwwwwwwwwww
「ライバル視」という観点がイタい。
Struts厨=幕府軍 JSF=薩長連合軍
>>886 こういうの見ていつも思うんだが、
2chでwwwwwwとか語尾に付けて幼稚なレスをする奴って
なんでいつも○◎ V.S. ××みたいな二元論で語ろうとするのかね。
用途に合わせて使い分ければいいだろ。
大体いい加減Strutsのアーキテクチャマンセーなんて奴いないよ。
GUIのリッチクライアントをWEBアプリに移植するってのをやってるんだが、
Strutsは複雑なデータ構造とか画面相手には向いてないね。
JSFってこのへんどうなんかね。
まだまだ枯れてないって印象で業務では提案しにくいと
ほとんど触ってもいないのに思っているところ。
>まだまだ枯れてないって印象で業務では提案しにくい ここ1年半ぐらい結構さわってるけど、ほぼその通り。 思想はいい。アーキテクチャもStrutsに比べたらかなりマシ。 でも枯れてないし、やはりアーキテクチャ上の問題もいろいろ・・・
rife、grails、appfuseみたいなフルスタックアプリケーションってどうよ? 一部にstruts使ってるみたいだけど。 開発を簡単にするっていうフレームワークの進化の趣旨に沿えば、 こういうのも正当の進化かなーと。 スレ違いだったごめんなさい
SAPでも使っとけw
893 :
デフォルトの名無しさん :2006/09/12(火) 02:13:48
一般に公開されているサイトでもStruts使ってるの結構ある? .doってなってるものはそう?
たいていそうだなぁ
.doそのまま使うのはよくないな 結構見るけど
>>895 え、なんで?
俺が今やってるとこ.doだけど。
JSPを外から見えるようにしてるのはちょっとなぁってのは思う。
897 :
デフォルトの名無しさん :2006/09/12(火) 23:56:33
.do隠しかたわからんぽ。教えてくれぽ
.asp でやったことあるよw
doって名前もどうかと思うが 変更したからって何かいいことあるとも思えない。
>>901 Struts内の脆弱性とかが出たときに多少狙われにくくなる
何使ってるかわからないと、相手も手が出しにくくなる (少しだけ) つーか、他の簡単なとこ狙う 404ページに鯖アプリとバージョン出すのとか論外
確かMISUMIのサイトが.doだった。
というか2はまだか・・・思ったより時間かかったな。
908 :
デフォルトの名無しさん :2006/10/05(木) 22:02:56
ApacheにMVCフレームワークが混在しすぎなんだけど Struts2とやらは今どのへんに熱い支持を受けてるの?
>>908 土木作業員を簡単に集めたいPM。
ほとんどのPMだな。
別に俺が熱い支持をしているわけではないが普通に考えれば
実績で劣るフレームワークを選ぶ理由はない。
Strutsは最近では古いアーキテクチャだが 上司に他のを提案しずらいんだよな・・・。 規模や内容的にJava5.0+Wicketとかが本来相応しい案件でも
むしろほかのを提案する必要など感じないけどな。 自動生成を含むツール群をすでに整備してあるのは言うまでもないが、 ほかのものにして工数削れるか?バグを減らせるか?というとまったくそういうこともないからな。
912 :
デフォルトの名無しさん :2006/10/08(日) 17:13:53
logic:redirectをJSTLで代用する場合、どんな書き方をしますか。
MVCで考えると、むしろあってはならないような気がするけど気のせい?
VIEWにリダイレクトなんて記述すんな童貞 って意味だと思うよ
>>913 そうおもう。リダイレクトするActionを呼べばよいだけだ。
Actionクラスを作る必要はなく、struts-configで定義するだけ。
>>915-916 なら理解できるのだが、
だとしたら、なぜlogic:redirectなんてタグをStrutsの開発者は作った(or採用した)のだろう?
>>917 アメリカあたりでは、いまだにJSP Model1の需要が結構ある。
日本ほどJSP Model2(いわゆるMVCモデル)への固執が無いらしい。
bean:headerとかbean:parameter、bean:cookie等もその流れだろう。
919 :
デフォルトの名無しさん :2006/10/10(火) 03:20:33
質問なのですが・・・ DBからデータを取得して<multibox>でデータの数だけチェックボックスを作ります。 □name1、□name2、□name3、・・見たいな感じです。 それからそのデータを元に関連がある所をデフォルトでチェックを付けときたいのですが どうやればいいんでしょうか? 関連のデータもDBから引っ張ってきます。 <logic:iterate id="Data1" name="Data2" property="List"> <html:multibox property="id" > <bean:write property="id" name="Data1" /> </html:multibox> <bean:write name="Data1" property="name" /> </logic:iterate> 只今のソースはこんな感じです。
920 :
919 :2006/10/10(火) 05:13:32
コレからどういうふうに書いていけばいいのでしょうか? 関連づかせるためのデータはList2としてDBからひっぱて来てあります。 JSP側の記述の仕方がわかりません。
>>918 Actionなしで、JSPだけで記述するということか。
それにしても、MVCモデルをうたっているはずのStrutsでなぜ?
というのが
>>917 の質問の本質だったりする。
>>919 フォームのidプロパティを配列にして、
チェックを入れたいidをJSPを表示する前に配列に入れておく。
taglibの質問ですが、 生成されたHashMapのキー名と値を jstlで、forEachによりキー名と値を 以下のレスのコードの様に表示したいのすが、その方法をご教示下さい。
List<Map<?, ?>> table = new ArrayList<Map<?, ?>>(); Map<String, String> rd = new HashMap<String, String>(); rd.put("c1","a"); rd.put("c2","b"); table.add(rd); rd = new HashMap<String, String>(); rd.put("c1","aa"); rd.put("c2","bb"); table.add(rd); こんな感じで生成したHashMapをjspの中で <table> <tr> <c:foreEach ・・・> <th>c列のキー名<th> </c:forEach> </tr> <c:forEach var="d" items="${table}・・・"> <tr> <c:forEach var = "d"> <td>r行のc列の値<td> </c:foreEach> </tr> </c:foreEach> </table> の様にして以下の用に表示したいです。 c1 c2 a b aa bb
Map の List にしてるけど List の List じゃダメなの?
>>924 MapのListでは不可能ですか?
ListのListでもかまいません。
>>923 スクリプトレット交じりで、小汚いけど。
<table>
<tr>
<c:forEach var="th" items="<%= table.get(0).keySet() %>">
<th>${th}</th>
</c:forEach>
</tr>
<c:forEach var="row" items="<%= table %>">
<tr>
<c:forEach var="td" items="${row}">
<th>${td.value}</th>
</c:forEach>
</tr>
</c:forEach>
</tr>
</table>
行に使うMapは、HashMapだと列順が制御できないから、
LinkedHashMapか、TreeMapなどのSortedMapを使ったほうが良いと思う
>>926 ありがとうございます。助かりました。
列のキー名取得:table.get(0).keySet()
各値は、取得した行のオブジェクト変数${row}を用いて、
valueで取得
で対応ということですね。
あと、HashMapも列順が保証されないから、上記の使用では
やめた方が良いということですね。
勉強になりました。
928 :
デフォルトの名無しさん :2006/10/17(火) 09:19:00
Strutsのトランザクショントークンって、CSRFの対策になりますよね? はっきり書かれたものを見たことがないんですが・・・
なるにはなる が、それだけで十分とはいえない、ってどっかでみたことあるな
931 :
927 :2006/10/17(火) 19:00:20
>>926 のコードを参考にしたところ、
カラム名のところでエラーとなったので、
request.setAttribute("col_header", table.get(0));
とし、
<tr>
<c:forEach var="th" items="${col_header}">
<th>${th.key}</th>
</c:forEach>
</tr>
としたら、正常に表示できました。
>>930 過去ログ見たら、理由は書いてないけどそう言ってる人がいました。
普通に対策できてるように見えるけど、何かまずいんだろうか。
ウインドウ複数開けないとかの機能的な問題なのかな?
933 :
デフォルトの名無しさん :2006/10/19(木) 21:48:49
チミたち、JSFを使わないのかい?
まともな実装ないし。
936 :
デフォルトの名無しさん :2006/10/22(日) 12:28:56
いまからStruts使うとしたら1.3? 書籍とかでてないから1.2のほうがいいでsか?
>>936 勉強なら1.3仕事なら1.2じゃない?
938 :
デフォルトの名無しさん :2006/10/23(月) 00:42:47
939 :
デフォルトの名無しさん :2006/10/23(月) 01:55:41
ibatesのよさも教えてください。 佐賀しても日本語のページがない・・・ なにか良いページ内でしょうか?
>>936 Struts を使わないという選択肢はないの?
942 :
936 :2006/10/23(月) 22:04:08
>>941 あります。wicket検討中です。
わちょーい
943 :
デフォルトの名無しさん :2006/10/26(木) 20:19:54
<html:link>タグで質問させてください。 たとえば↓こういう場合でactionのパラメータにiの値を持たせたい場合 どうやって指定すればいいのでしょうか?Beanなら指定する方法見つけたのですが、 普通の変数だとわかりませんでした。教えてください。 <% for(int i =0 ; i<10 ;i i++){ %> <html:link action="/test">test</html:link> <% } %>
>>942 Clickは?
あと社内システムならJSFも
>>943 <c:forEach begin="0" end="9" var="i">
<html:link action="/test${i}">test</html:link>
</c:forEach>
947 :
943 :2006/10/29(日) 16:17:44
948 :
943 :2006/11/25(土) 00:59:47
validator-xmlってみんな使ってる?
validator-xmlは使ったことないなぁ
struts1.2を理解するための良書(和書)といえばなんでしょうか?
951 :
デフォルトの名無しさん :2006/12/11(月) 01:26:18
Struts2.系を待つのか他のフレームワークにいいのあるのか悩み中なんだけど、みんな仕事でどんなの使ってる? それともまだまだStrutsが主流なのかなぁ?
>>951 一応ライブラリは1.2なのだが新機能をほとんど使ってないので事実上1.1かも・・・。
StrutsよりWebサービスじゃまいか?
DI興味深々
URLClassLoaderめちゃめちゃ重いんですけど・・・。 そんなものですかね? ClassLoader lo = new URLClassLoader(new URL[]{ new URL("file://C:/・・・/classes/"), new URL("file://C:/・・・・・/classes/") }, null); Class clazz; clazz = lo.loadClass("classload.Test");
BEA Workshop Studio または for Struts っていいなぁ
何がいいんだね?
hosu
大体今時すとらっつなんて(ry
>>960 まぁ良くも悪くも標準だから。
しかしすとらっつすら難しいとか平気なツラして
ほざく奴が本当うようよいるからな。
金もらう資格ねーっての。
Strutsは十分難しいだろ。
難しいっつうか面倒くさい。
すとらっつが標準ってことは無いだろうー つーかクライアントがJSPとかってありえねーだろー って既に5年以上前に思ってたけどいまだにすとらっつかよーw
Strutsを簡単みたいに言うのは Strutsの表面的な部分しか触っていない翔子
じゃあ、何がいいの?
な い しょ ♪
最近はDIコンテナ導入する機会が増えてきたんだけど、みなさんWebの部分には何使ってます? DIコンテナ入れてもその辺は結局まだまだStruts、ってな感じなんですかね? まぁ個人的にいいな、と思ってても実績が・・・とか使える人が・・・みたいな話になって結局Strutsってパターンが多そうだけど。
Struts使える(使いこなせる)香具師もそう多くは無かろう 結局、自分で選択するのが億劫なのを適当な理由をつけて正当化しているに過ぎないのさ
970 :
デフォルトの名無しさん :2006/12/23(土) 17:17:28
Struts2まだー
業務アプリならJSFでいいんじゃね?
ないな。自動生成等で固めたstruts+jspと比べて生産性があるとは思えん。
個人的にはstrutsとJSFならJSFの方が生産性高いけど。 ただしIBMのな。
まあ、WASは売れてるだけのことはあるな。
単なる右へならへだろ
>>973 IBMのJSF実装がってこと?
MyFacesはいまいちなんかね、噂を聞いた限りでは。
今までTigerだったのに
Java2になる前から存在するシステムのメンテだぜ、仕事が・・・
StrutsでいいからWEBアプリに戻りたい。
>>968 SpringMVC + Velocity でやってみた。
これでいいかなって感じ。
客先からWebでって言われたら、俺はこれで行く。
Web ってどうせガリガリ書くことになるんで
なるべくシンプルなやつが良いと思う。
JSTL とか使うといろいろ出来そうで
結局かゆいところに手が届かない。
JSF とかはもうただの暗号だよ。
もっともWebもどうかと思うけども。
リッチクライアント + WebService が一番バランス取れてる。
velocityは結構分かりやすいよね
JSFって何かフレームワークと依存してしまっていて、気軽に使えない。 strutsにしろseasar系のフレームワークにしろフレームワーク内の依存関係が強すぎて、 一部の機能だけ取り出して使うってのが、気軽にできないのが、凄くイヤ。 SWTでweb側で作った資産を流用ってやってるけど。 クライアントアプリなのにservlet.jar同梱とか何が何だかの状態になったりorz
それは逆切れじゃないの?
>>979 >JSFって何かフレームワークと依存してしまっていて、気軽に使えない。
JSFってそういうもんでねーの?
もともとツールのサポートを前提とした作りだと思っていたけど。
気軽に使えるかどうかはまだ嬲り回してないのであんまり言えない。
なんか細かいところが隠されていて気持ち悪いってのは何となくわかる。
つーかWEBに依存するようなライブラリをクライアント側で
使いまわそうとしているところに駄目駄目感を感じる・・・
ServletAPIに依存したところとStandAloneで動かせるところを
適切に分離できてないんじゃないの?
画面の部品周りにゴチャゴチャロジック書いて
滅茶苦茶保守性が悪い、テストがしにくい化け物みたいなのを作り上げた人が
同じようなことを言っていた。
> JSFって何かフレームワークと依存してしまっていて 依存していないから、EJBでもSpringでもSeasarでも自由に組み合わせられるわけで。
なんだか話がずれてるぞ
984 :
981 :2006/12/27(水) 20:56:17
あ〜なんか話がずれている気がする。
>>979 氏の言うFWってJSFに対する各ベンダーの実装のことだよね???
文脈からして。
>>982 その場合のFWって何を言っています?
その言い方だとStrutsでもその親戚の皆さんもみんな
EJBやらS2やらを組み合わせられるって話になりますよね?
でもStrutsは確かに飽きたなー
なんか画期的なやつ誰か考えとくれ!!!
俺の隣の部署がRailsで作ってた。 短期開発にはうってつけだな、あれは
>>987 情報d
始まってるんだ、いいなぁ
開発サポート言語位でしか使われてないのかと思ってた
んじゃ勉強本腰いれるかな
Groovy版のGrailsとか、Java5対応のTrails,Sailsあたりなら、 現行、Java:Tomcat,Strutsな環境とも共存できそうなんだけどどうだろう?