トップページphp
982コメント329KB

フレームワークStrutsをいじくり倒す人の為のスレ

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/04/28 08:14ID:Ub0n1fGR
 流行っているのか、流行っていないのか謎の Struts を語るスレです。
http://www.ingrid.org/jajakarta/struts/
http://jakarta.apache.org/struts/
030629104/03/02 11:36ID:AJ5+7psc
>>305 MVCは、Strutsでは不十分なのでしょうか?
0307nobodyさん04/03/02 11:42ID:???
>>305 が何を持ってそう判断したか分からんが
Tapestry + HIBERNATE、これ最強。
0308nobodyさん04/03/02 13:16ID:???
>>307
物凄い勢いで、禿しく同意
030929104/03/02 17:40ID:AJ5+7psc
>>307
HIBERNATEって、SQL ラッパーみたいに捕らえていいの?
詳しい人の説明をお願いします。
0310nobodyさん04/03/02 17:50ID:AJ5+7psc
http://www.kanzaki.com/docs/sw/rss.html
0311nobodyさん04/03/02 17:50ID:???
>>310 すまん、誤爆
0312nobodyさん04/03/02 19:32ID:???
>>309
DBアクセスレイヤーをもうけることで、役割が明確になり、
DB依存性を排除できる。理想は。
Hibernate だったらトランザクションやキャッシュ機構、
XML から Bean 生成、DB スキーマから Bean 生成、
スキーマ& Bean からXML 生成などがある。
0313nobodyさん04/03/02 20:37ID:???
Hibernate、オブジェクト操作だけで一通りのDB操作が可能だし、
さらに細かいことやりたいなら、HQLっつーSQLライクな記述でゴリゴリできる。
柔軟でいいよね。
たいがいのO/Rマッパーは、スキーマからJavaクラス作るときに、XML書いたり
XDoclet用のタグ書いたりとめんどくさいのに、jFaceDbc使えば、
既存のスキーマをリバースして、Javaのソースまで作ってくれるのが、(・∀・)イイ!
031429104/03/02 21:09ID:???
>>312 >>313 情報さんくす。でも、一文で数千バイトのSQL文を書いてしまう私に、向いていない気がしてきた。
しかし、食わず嫌いは良くないので、近い将来試してみる(予定)
0315nobodyさん04/03/02 22:10ID:???
>>314
SQL 直書き好きなら DbUtils が簡単でいいぞ。
しかし数千バイトの SQL って本当に必要か疑問。
031629104/03/02 23:03ID:AJ5+7psc
>>315
DbUtils ですね。調べてみます。

>しかし数千バイトの SQL って本当に必要か疑問。
正規化されたテーブルから、レポートを一発で出そうとするとクエリーが複雑になりますね。
そして、複雑なストアドを書いたりすると、もっと多くなる予感。
0317nobodyさん04/03/02 23:16ID:???
ビュー使えよ
031829104/03/02 23:24ID:AJ5+7psc
>>317 おっしゃる通りですな・・・(´∀`)モケモケ
0319Gon_Yuri04/03/03 14:58ID:???
突然脈絡の無い質問で申し訳ないのですが、
Struts環境下でSessionをオブジェクトに格納した場合、
TokenIDなるStruts固有のIDなるものがattachされるのですか?

(もし存在するのであれば)またそれってなんのためにあるんでしょうか?
すみませんがご教示お願いいただけないでしょうか、みなさまがた。。
0320nobodyさん04/03/03 15:03ID:mGkaH2Ir
>>319
「トークン」は、二重押し防止機能。
0321Gon04/03/04 15:35ID:???
早速の返答ありがとうございました!
ですが、セッションに格納するのに二度押し防止というのは
状況が良く分からないのですが、たとえばどのようなケースでの話しなのですか?
0322nobodyさん04/03/04 15:40ID:???
自己レスです。
これってブラウザで何らかの処理をしたあとに戻ってしまったときに、
もう一度その処理をしてしまわない(たとえば入金など)ようにするための
するという話でしょうか?
0323nobodyさん04/03/04 16:33ID:MDOKWyiL
>>322 ここの説明を読めば、なぜセッションに情報が含まれるのかが分かると思います。

http://muimi.com/j/jakarta/struts/struts5.html#SyncToken
0324nobodyさん04/03/04 18:33ID:+Av049LB
>322
そゆこと。

書き込みボタンをダブルクリックしたら、2重投稿になる掲示板とかもあるよね。
ああいうの防止にも使えるし。

複数画面にわたった処理がある場合に
途中の画面でブックマークされて後日そのブックマーク使ってアクセスされた場合にも
システム側でトークンの有無を見てたら、どこかの画面に飛ばしたりもできる。
色々便利ですよ。
0325nobodyさん04/03/06 06:16ID:Ag2/McPy
非推奨の方法を、今更解説してもどうかと思いますが、こんなの出ていました。

http://www.atmarkit.co.jp/fjava/rensai3/struts03/struts03_1.html

しかし、StrutsのFAQには、以下のように明示されています。
http://jakarta.apache.org/struts/faqs/database.html
"The DataSource manager is being retained in Struts 1.x for backward compatibility but may not be retained in Struts 2.x or later."

山田祥寛氏と@ITは、どういう意図で紹介しているのでしょうかね・・・
0326nobodyさん04/03/06 12:35ID:???
@ITの記事なんか話半分に聞いとけ
0327nobodyさん04/03/06 14:16ID:???
validate()によるエラーメッセージ出力以外で
Actionクラスから画面にメッセージを出力する場合の最適な方法って何?
Beanに詰めてJSPで出力が妥当かな?
0328nobodyさん04/03/06 17:51ID:???
>>327
・Action#saveErrorsを使う
・struts-config.xmlにexception要素を定義して、Actionからは例外を投げる。
・MyActionBase extends Action とかして俺様メッセージ表示機構を作る。
・自前のRequestProcessor用意して何かできるかも。
・その他

何が最適かなんて一概には言えないでしょ。
0329nobodyさん04/03/06 19:23ID:???
bean:writeでいいんじゃねーの
0330nobodyさん04/03/07 01:53ID:???
エラーはエラーとしてはっきりと区別させたい(<html:errors />で出したい)ならsaveErrors
メッセージが必要なだけならBeanに詰めてJSPで出力(<bean:write/>)
0331nobodyさん04/03/07 02:47ID:???
>>325
@ITはM$好きであることと、山田某が.NET、Javaかまわず何でも書いてる奴
であることを考えると、@ITはJavaを潰そうとしているのではないか?w

しかし、山田某、見境無いなあ・・・。金ないのか?
0332nobodyさん04/03/07 03:08ID:???
「10日で覚える〜」を書く人間がまともとは思えないよ。
0333nobodyさん04/03/10 00:18ID:Y4AzoxeC
Struts+JBossって使われているの?
0334nobodyさん04/03/10 23:41ID:???
>>333
EJB 自体があまり使われてない。EJB が目的ではない?
http://pc2.2ch.net/test/read.cgi/tech/1036481443/

もちろんまったく使われてないわけではないので
技術者として習得する価値はある。
0335nobodyさん04/03/11 20:58ID:???
EJB興味はあるんだが、敷居が高そうな感じがする。
でもServletだけでは限界を感じるしなあ。
0336nobodyさん04/03/11 23:27ID:???
>>335
レイヤが違うもので限界を感じるっていわれても意味が分からん。
ORマッパーをどれかひとつと言われたら Hibernate。 間違いない。
0337nobodyさん04/03/12 03:25ID:5qVN4VSs
>>335 機能だけなら Servlet で全て足りている気がしなくもない。コード量が膨大になるだけ。
>>336 Hibernate を熱く語っているね。
0338nobodyさん04/03/12 20:49ID:???
>>336
EJBといえばO/Rしか思いつかんのか?
0339nobodyさん04/03/12 23:04ID:???
>>338
あと EJB といえば過去の遺物かな。
0340nobodyさん04/03/13 20:05ID:OCTfOcMT
<html:link>を使ってform(ActionForm)のsubmitって出来るんでしょうか?
0341nobodyさん04/03/13 20:57ID:1bZkOokW
>>340
フォーム名は分かるから、JavaScriptでonclickでイベントを拾えばどうにかなるかも。
やるべきではないと思うけどね。
0342nobodyさん04/03/13 21:23ID:OCTfOcMT
今こんな感じなんですけど、formの中が空なんですよね…
<html:link action="/add" onclick='document.forms["turnover"].submit();'>[ADD]</html:link>
0343nobodyさん04/03/13 22:15ID:???
カスタムタグの中に変数って使えない?(もしくはスクリプトレット)
<html:checkbox name="..." property="..." disabled="${変数}" />
みたいな。
resinでは使えたけどweblogicでは使えなかった。
0344nobodyさん04/03/13 22:33ID:???
スクリプトレットなら使えるよ
0345nobodyさん04/03/13 23:15ID:OCTfOcMT
スクリプトは使えると思うけど、どうやってformをsubmitするんでしょう?
0346nobodyさん04/03/19 03:27ID:???
JavaScriptでフォーム送信するなら、
<html:link>つかう必要ないだろ
<A>で良いだろ
0347nobodyさん04/03/19 21:20ID:???
そんな本当のこと言ったらhtmlタグはほとんどいらんぞ。
0348nobodyさん04/03/20 05:19ID:???
一番いらないのは<html:html>ではないかとw
0349nobodyさん04/03/20 11:15ID:???
beanやlogicは便利だけど、htmlは本気で意味不明
0350nobodyさん04/03/20 14:14ID:???
<html:form>も必要ない?
0351nobodyさん04/03/20 14:41ID:???
>>348
国際化アプリで必要
0352nobodyさん04/03/20 14:41ID:???
そんなこと言ったらStrutsなんていらんぞ
0353nobodyさん04/05/15 13:04ID:iT9NId+G
Struts、確かに便利ではあるがページフローの制御がいまいちよくわからんですよ。
セッションオブジェクト使用不可な条件なんですが、これって自縄自縛っぽい状態なのか?
0354nobodyさん04/05/15 13:29ID:???
え?
その制御を楽にするためのStrutsじゃないの?
あとそれとセッションオブジェクト使用不可な条件と何が関係あるの?
0355nobodyさん04/05/15 22:18ID:???
セッションを使えないという仕様なのか?
Strutsは確か、セッションを使用しないとダメじゃなかったか?
0356tommy04/05/17 10:43ID:UlYZTV/R
strutsを使ったショッピングカートのサンプルが置いてあるサイト
あったら教えてもらえませんか?
0357nobodyさん04/05/17 20:46ID:???
なか見てないので知らないけど、説明だけ読んだらこれそうみたい。

http://sourceforge.net/project/showfiles.php?group_id=49385&package_id=80917
0358nobodyさん04/05/29 04:18ID:???
なぁ、submitボタンのvalueってつかうのか?
それも2バイト文字を参照して内部動作を分岐させているよう
なのだが・・・。
Strutsではそれが普通なのか?まったく解せないでつよ(困惑
0359nobodyさん04/05/29 11:42ID:???
は?
0360nobodyさん04/05/29 17:51ID:???
>>358
おまいの見ているソースがクソなだけ。
0361nobodyさん04/05/29 21:45ID:???
>>360 はStrutsのソースがクソと言いたいわけか・・・
>>358 Struts作ったやつらははじめ2バイト文字のことなんか
考えてなかったのだが後になってあわてて2バイト対応したためと思われ。
0362nobodyさん04/05/30 17:21ID:???
>>361
あ、Struts のソースの話か… 
0363nobodyさん04/05/31 00:23ID:???
>>362
いや、Strutsのソースじゃないよ。
>>360
ありがとう、やっぱあのSEはクソだわ。
0364nobodyさん04/05/31 23:10ID:???
それって、複数あるsubmitボタンのどのボタンを押したかを判定してるのか?
strutsでそんな機能があったはずだが。
0365nobodyさん04/05/31 23:18ID:???
>>363
Struts の org.apache.struts.actions.LookupDispatchAction の話じゃないのか?
0366nobodyさん04/06/11 14:14ID:pbSttBHh
質問させてください。
Struts1.1でValidatorを使ってるんですが、
JSPで1つのacitonの中に更新ボタン、クリアボタン、戻るボタンがあります。
更新ボタンが押されたときはValidatorで入力チェックを行い、
他のボタンが押された場合はValidatorが効かないようにしたいのです。

今後携帯にも展開する予定なのでJavaScriptは極力避ける方針なのですが、
どのようにすればよろしいでしょうか?

actionを分ける事も考えたのですが、改行されていまうため、悩んでいます。
0367nobodyさん04/06/11 14:20ID:???
>>366
html:cancel
0368nobodyさん04/06/11 14:24ID:???
>>367
本当だっ!ありがとうございます!!
助かりました(^^
036936604/06/11 15:52ID:???
html:cancelに関して、もう1つ質問させてください。
propertyに値を指定するとValidatorを回避できないようですが、
1つのaction内にhtml:cancelを複数設置して、actionクラス側で判定する事は可能ですか?
037036604/06/11 15:54ID:pbSttBHh
例えば「クリアボタン」と「戻るボタン」を設置したい場合などです。
0371nobodyさん04/06/11 16:00ID:???
>>369
org.apache.struts.actions.LookupDispatchAction
037236604/06/11 17:57ID:pbSttBHh
>>371
ありがとうございます。
試してみますm(_ _)m
0373nobodyさん04/06/11 19:11ID:???
>>367 >>371かっこえぇ。惚れた。
0374nobodyさん04/06/12 14:35ID:???
すぐ上>>365で話題になってるんだけどな
0375nobodyさん04/06/13 00:03ID:???
struts-facesってうごかんじゃないかー
0376nobodyさん04/06/16 23:51ID:zsyyEODZ
質問なのですが、検索結果を、strutsの<logic:iterate>タグを使用してJSPに表示しています。

そこで、例えば検索結果が100件あったとして、そこから30件ごとに分け、googleのように次の〜件
とするには、どうすればいいでしょうか?
iterateでlengthの値を30にしても、30件しか、もちろん表示されません。

いったい、どうすればいいのかわからないです。
難しいですが、分かる方は、ぜひ教えて欲しいです・・・・・・。
0377nobodyさん04/06/17 00:11ID:???
>>376
>iterateでlengthの値を30にしても、30件しか、もちろん表示されません。
30件ごとに分けたいんだろう。なのに
>30件しか、もちろん表示されません。
というのはおかしい。
言いたいことはわからないでもないが、人にものを伝えるときはもっと気を遣え。ばか。
offsetつかってスタート地点を決めればいいだろが馬鹿莫迦バヵ
037837604/06/17 00:28ID:jy0PTqdk
>>377
マジツッコミ、サンクスです。

offsetでスタート決めるのはわかりますが、offsetの値を動的に変えるにはどうしたらいいでしょうか?

あと、submitで「次の30件を表示」などを用意して、遷移先を、検索結果が表示されてる、今いるこの画面に
次の30件を表示する方法がわからないです・・・。

説明下手でスマソなのですが、宜しくお願いします〜・・。
0379nobodyさん04/06/17 12:37ID:???
>>378
logic:iterateタグの説明をよく読みましょう。
ttp://jakarta.apache.org/struts/userGuide/struts-logic.html#iterate
ポイントはoffsetに指定するのはInteger型のJSP Beanということ。

ちなみに、ドトネトにはDataGridコントロールがあるので、
この辺はすごく楽だねえ・・・。


ところで、普通の画面は作れるの?まずはそこから始めた方が・・・。
0380nobodyさん04/06/17 20:07ID:???
こんなのもあります。
http://jsptags.com/tags/navigation/pager/index.jsp
0381nobodyさん04/06/17 22:49ID:???
>>379
ドトネトでなくても、ADOなんかだとページ単位で切り分けるの簡単だよな。
こーいうの標準で用意してくれりゃいいのにね。

>>380
面白いね
0382nobodyさん04/06/18 02:59ID:???
>>380
なるほど。面白そうだね。
038337604/06/19 01:47ID:2EKqNUkj
だめだ・・。やっぱりできない。
JSPBeanがわかんない・・、javaBeanとは違うの?
Beanの値をoffsetにいれても,、次の30件表示のリンクを押してoffの値を、変化させる方法がわかんないです・・。

Servletでもいいので、いいサンプル載ってる所ありませんかね?
ぶっちゃけ、Servretでも、できない・・・。
0384nobodyさん04/06/19 18:32ID:pMTsomP7
>>387
ぶっちゃけなんでもいいんだよ。数字(で構成された文字列)が返ればね。

offset="<%=anyBean.getOffset().toString()%>"
でも
offset="<%=anyIntegerInstance%>"
でも
offset="<%=anyIntegerInstance.toString()%>"
0385nobodyさん04/06/19 18:35ID:pMTsomP7
なんか化けたので再送

offset="<%= anyBean.getOffset().toString() %>"
でも
offset="<%= anyIntegerInstance %>"
でも
offset="<%= anyIntegerInstance.toString() %>"
でも
0386nobodyさん04/06/20 00:26ID:???
>>383には才能がない。

Javaの才能とかそういうんではなく、勉強する才能がない。
0387nobodyさん04/06/20 09:32ID:pwr2yWDM
>>383
素直にあきらめた方が賢明かも、、、。まあ、ヒントだけあげるよ。
「次の30件表示のリンクを押してoffの値を、変化させる」には、
どうしたらいいかを考えよう。

まず、「次の30件表示のリンクを押し」たことをサーバ側に伝える必要がある。
まあ、これは「次の30件表示」を行うアクションがあれば
それを呼び出すだけだからできるよね。
ここでつまづいているなら、Hello.worldからやり直し。
で、「次の30件表示」を行うには、まず今どこにいるかを
知ってないといけないよね。現在位置を知っていて、
はじめて「現在位置 + 30」という処理ができる。
で、現在位置を何で管理しようかという話になる。
独自のBeanを定義した方が何かと便利だけど、
まずはIntegerでもいいよ。先頭から始まるから、初期値は0だよね。

何で管理するかは決まったけど、このオブジェクトを
セッションに結びつけないと、毎回新しいオブジェクトを作成してしまって、
ちっともページが進まないということなってしまうよ。
おそらくつまづいてるのはここだよね。
ここがわからないなら、Tomcatについてる簡単なサンプルで
セッションの使い方を勉強するのがいいよ。

基本的なやり方は最初のページが表示されたタイミングで、
新しいオブジェクトをセッションに結びつける。
「次の30件表示」が押されたら、結びつけてあるオブジェクトを+30する。
この数値を利用して、一覧を再表示する。こんなところかな。
0388nobodyさん04/06/20 11:19ID:???
コピペかと思ったぜ。
だけど、>>383みたいなのがいるから、全体的なプログラマーのレベルが
低くなるんだよな。
がんばっているというのは良いことだけど、まず本を買え、と言いたい。
0389nobodyさん04/06/20 11:38ID:???
「次へボタン」を押したら現在のoffset+30送ればいいだけなのに、何をやってんのこいつは?
039038304/06/20 14:30ID:anBuFkfy
みなさん、アホな俺にいろいろと、ありがとうございました。
今一度、セッションから、勉強し直すことにします。
>>384
>>387
お二人とも、ありがとうございました!!
参考になりましたです。
0391単純形04/06/20 21:24ID:???
ShowList.java:
public class ProductInputAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
HttpSession session=request.getSession(true);
session.setAttribute("offset",new Integer(0));
return mapping.findForward("showList");
}
}

NextPage.java:
public class ProductInputAction extends Action{
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){
HttpSession session=request.getSession(true);
Integer offset=(Integer)session.getAttribute("offset");
if(offset==null)session.setAttribute("offset",new Integer(0));
else session.setAttribute("offset",new Integer(offset.intVale+30));
return mapping.findForward("showList");
}
}

List.jsp
...
<bean:define id="offset" name="offset" scope="session" />
<logic:iterate id="item" name="lists" offset="<%= offset %>"....
...
0392nobodyさん04/06/20 21:41ID:???
>>391
普通はこんな単純にはしないけどね

・全体件数を越えてページ繰りするのを防ぐ
・表示件数を変更できるようにする
・巻き戻しやページ指定ジャンプに対応する
....

というような理由から独自クラスを定義してそれを呼び出すのが普通。
0393nobodyさん04/06/20 21:51ID:???
>独自クラスを定義してそれを呼び出すのが普通。

…は?
どうやるかなんか人それぞれだろ?
0394nobodyさん04/06/20 22:33ID:???
>>393
人それぞれというのは同意するけどそこにセンスが表れるんだよ
それぞれ違ったものが同じレベルのわけねーだろ?
0395nobodyさん04/06/20 23:37ID:???
独自クラスなんかイランよ。
規模にもよるが、全件Listに持ってる時点で疑問に感じるけどね
数万件ヒットしたらどーすんのよ。

基本的に現在位置と表示件数さえ持ってれば済む話だろ。
0396nobodyさん04/06/21 00:48ID:???
は?
独自クラス=全件リストしか思い浮かばないのか?
独自クラスがあれば、インターフェースを整理できるんだよ

bean.init()
bean.prevPage()
bean.nextPage()
bean.jumpPage(int page)
bean.changeLineCount(int count)
bean.getPageCount()
....
0397nobodyさん04/06/21 01:08ID:???
結局、offsetなんかを動的にパラメータとして渡すことができないと悩んでいるんだろ?
見当違いな問答してんなよ。
0398nobodyさん04/06/29 22:57ID:???
お〜い、ム板のストラシスレが大変なことに
0399nobodyさん04/07/01 00:33ID:???
>>398
てかスレ終わっちゃったし。次スレはどうなるのだろう・・・。
0400nobodyさん04/07/01 00:35ID:???
これぽい
エクリプス+Struts開発
http://pc5.2ch.net/test/read.cgi/tech/1086356759/
0401nobodyさん04/07/03 03:26ID:???
>>400
そこなのか?? まあ、そこでレスがどんどんつくならいいけど。
0402nobodyさん04/07/03 09:06ID:lwtie6Ml
質問2つお願いします。

1.Opera7.23をクライアントに使うとセッションIDをURL Rewriting
する状態にならないとセッションの特定ができなくなってしまう
らしく、強制的にセッションIDをGETにする方法教えてください。

2.Action経由でBeanで初期値を設定した<html:text>などの入力
フォームを<html:submit>で送信するときに、この画面を表示したま
ま放置してセッションが破棄された後で送信すると、java.lang.
NullpointerExceptionが出るのが、Global Exception の設定で
キャッチするように設定しても捕まえられないので、捕まえる設
定などありましたら教えてください。
==今の設定==
<global-exceptions>
<exception handler="com.hoge.test.exception.SystemExceptionHandler"
key="errors.deadline" path="/WEB-INF/pages/syserror.jsp" type="java.lang.NullPointerException"/>
</global-exceptions>
0403nobodyさん04/07/03 13:45ID:???
>>402
Filter使って、セッションをチェックするのはどうかな?
俺も、今から実装しないといけない・・・
0404nobodyさん04/07/04 00:52ID:B3Fr8XMm
>>398
テンプレートはどこにある?
0405nobodyさん04/07/04 01:02ID:B3Fr8XMm
テンプレートはこれでいいだろうか?



Apache Strutsフレームワークについて語るスレ

△△もまいら漏れにStrutsの良さを教えてください
http://pc5.2ch.net/test/read.cgi/tech/1048030962/
△△つづいて漏れにStrutsの良さを教えてくだっさい
http://pc5.2ch.net/test/read.cgi/tech/1068207164/
   
■ このスレッドは過去ログ倉庫に格納されています