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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/04/28 08:14ID:Ub0n1fGR
 流行っているのか、流行っていないのか謎の Struts を語るスレです。
http://www.ingrid.org/jajakarta/struts/
http://jakarta.apache.org/struts/
0465nobodyさん04/08/18 23:51ID:???
>>464
nameが同じじゃないと
0466nobodyさん04/08/18 23:52ID:???
あ、この場合はpropertyね
0467nobodyさん04/08/19 21:49ID:???
>>464
itareteで作ってるの?
それとも、自作?
どちらにしろ、すべてproperty="name"にすれば
form.javaで
String[] name = form.getName();

で取れる。
formはキャストしたものね。
0468nobodyさん04/08/23 17:21ID:???
ふと思ったんだが
配列で取る場合、格納される位置ってのは
保証されているんだろうか?
たとえばソース表示で右上から順に
格納されていくとか・・・。

0469nobodyさん04/08/23 17:37ID:???
>>468
保証されない。
0470nobodyさん04/08/24 17:42ID:CGoWFOLW
ActionFormの初期値をデータベースなどから動的につくりたい場合

init.do(初期化Action) => input.jsp(入力フォーム) => input.do(入力Action)

のように初期化するだけのActionを設けて、そこから遷移させるもんなんでしょうか?
それともinput.jspの先頭でFormBeanを操作する?
0471nobodyさん04/08/24 17:46ID:???
init.doをForwardActionのサブクラスにしてその中でFormBeanを操作した。
047247004/08/24 17:58ID:???
>>471
速レスどうも。

メンテを考えるとできるだけ一般的な手法をとりたいのですが、
はじめてのStrutsなので結構難儀してます。
参考になりました。
047347104/08/24 18:06ID:???
>>472
すまそ、漏れの場合そうしただけでこれが一般的かどうか全然わからん
0474nobodyさん04/08/24 20:36ID:???
>>470
別にそれでいいんじゃないの?
0475nobodyさん04/08/24 21:33ID:???
>>470
一般的といえばそれが一般的だけど、それ、ActionFormの初期化じゃなくてinput.jspの初期設定ね。
0476nobodyさん04/08/25 09:48ID:???
テキストボックスが10個あって
それの入力内容を配列に格納したい時って

たとえば
private String[] textbox = new String[10]


for(int i=0;i10;i++){
  String param_name = "param";
  param_name=param_name+i;
  textbox[i]=request.getParameter(param_name);
}


とかっていうダサイコードかかなきゃいけないんですか?
0477nobodyさん04/08/25 10:34ID:???
>>476
もしかしてスレちがいの話題?
Strutsなら直接request#getParameter()はしない。

>>475
> それ、ActionFormの初期化じゃなくてinput.jspの初期設定ね
ここよくわからん
047847604/08/25 10:43ID:???


10個あるテキストボックスのname属性を
全て同じ名前にすれば

↑のようなコード書かなくても
Strin[g[] textbox=form.getParam();

で取れるんだが、これだと配列の要素位置の保証が
無いと469がいっていたので・・・・。
保証があれば、↑のようなコードかかなくてもいいのだが・・。
0479nobodyさん04/08/25 19:44ID:???
んなことしたけりゃ連番で名前つけろよ。
全部同じ名前ならどれも等価だろ、順番機にしてどうすんだ
0480nobodyさん04/08/25 19:58ID:???
そうだね。
ブラウザがどの順にPOSTするかも不定だろうし。

まー実装上は問題ない気もするけど。
0481nobodyさん04/08/26 10:37ID:???
実は仕事で配列を使ってデータを入力するフォームがあって、
各種プラットフォーム、osのテスト通ったが特に問題はなかったわけだが、、
たまたま?
0482nobodyさん04/08/26 10:57ID:???
>>481
たまたま。
実際にはHTMLで記述された順に送信するブラウザがほとんどだし、
そういう動作をしないブラウザを俺も知らないが
仕様上保証されているものではないので、順不同で送信する
ブラウザがあっても(既存のブラウザが将来のバージョンでそうなっても)
文句は言えないよ。
0483nobodyさん04/08/26 14:39ID:???
validation.xml用のEclipseプラグイン
ってありますかね?
あったら便利なんだけど
0484nobodyさん04/08/26 15:24ID:???
DBの検索結果をどっかのオブジェクトに保持したいのだが、
ActionFormのメンバ変数に保持させるのはあまり宜しくない?

やっぱ自作のBeanを作ってそれをインスタンス化して格納して
セッションに入れた方が良いのか?

0485nobodyさん04/08/27 13:25ID:???
基本的なことかもしれないけど教えてください。
JSPでタグを使って
Beanのプロパティを表示したいのですが、
このBeanってもしかしてシリアライゼーブルをインプリメントしていないと
タグを使ってもとりだせないのでしょうか?
0486nobodyさん04/08/27 13:38ID:???
logic:iterateをつかってBeanの内容を表示したいのですが
うまくいきません、恐らくJSP側に問題があると思います。
ご指摘宜しくお願いします。


public class SerchForm extends ActionForm {

private String[] serchresults_ID;

/*以下省略します*/
}


====================JSP====================
・・・・・・
・・・・・・
<logic:iterate id="TserchFormd" name="serchForm" >
<li><bean:write name="TserchFormd" property="serchresults_ID" />
</logic:iterate>
・・・・・・
・・・・・・
0487nobodyさん04/08/27 17:34ID:???
すみません、全て自己解決しました。
0488nobodyさん04/09/07 21:22ID:???
Strutsを最近勉強し始めたものです。

サーバ : Tomcat 5.0.27
OS : Windows 2k , Fedora core 1
Struts version : 1.1

struts-htmlとstruts-tilesを使用しています。
サイト全てをxhtmlで出力させたいので、メインのレイアウト用JSPには
<html:html xhtml="true">
と記述しています。

質問ですが、struts-tilesでheader.jspを読み込むようにしてあるのですが
header.jspのほうで
<html:img page="/images/hoge.gif" alt="" width="xxx" height="yyy" />
を入力するとHTML形式で出力してしまいます。

このようなtilesを使用している場合で
全てのパーツ(JSP)をXHTMLとして出力させる方法がありましたら
教えていただきたいです。よろしくお願いします。
048948804/09/08 10:15ID:???
いろいろ調べていたら対象方法がわかりました。
<html:xhtml />

このタグを各パートのjspに入れれば解決できました。
スレ汚し失礼しました。
0490nobodyさん04/09/08 23:25ID:???
>>489
むしろ乙。
0491nobodyさん04/09/09 00:47ID:nnK3UDEH
S2Strutsはどう?
0492nobodyさん04/09/10 16:26:19ID:???
Struts1.1でJSPを表示してSubmitするプログラムを作成しているのですが、
表示は可能なんですが、Submitしたら次のアクションに行く前に
[BeanUtils.populate]: java.lang.NullPointerExceptionが発生します。
やはりリストの中のマップに値をセットするのは無理なのでしょうか?
何か良い解決策をお持ちの方、ご教授下さい。

次の発言にソースを記述します。
0493nobodyさん04/09/10 16:28:43ID:???
Actionクラス
public class HogeAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {

HogeActionForm hogeActionForm = (HogeActionForm)form ;
List list = new ArrayList();
for(int i = 1; i <= 10; i++){
Map map = new HashMap();
map.put("key1", "aaa" + i);
map.put("key2", "bbb" + i);
list.add(map);
}
hogeActionForm.set_dataList(list);
/* ---以下省略--- */
}
ActionFormクラス
public class HogeActionForm extends ValidatorForm {
private List _dataList = null;
public List get_dataList() { return _dataList; }
public void set_dataList(List d) { this._dataList = d; }
/* ---以下省略--- */
}
0494nobodyさん04/09/10 16:30:34ID:???
JSP
<html:form action="/hoge">
TABLE
<logic:iterate id="dataList" name="hogeForm" property="_dataList" indexId="i">
TR
TD<html:text name="hogeForm" property='<%= "_dataList[" + i + "].key1" %>' />/TD
TD<html:text name="hogeForm" property='<%= "_dataList[" + i + "].key2" %>' />/TD
</TR>
</logic:iterate>
/TABLE
<html:submit value="Submit" />
</html:form>

長くてすみません。よろしくお願い致します。
0495nobodyさん04/09/10 16:46:02ID:???
ちなみにタグの<>があるとなぜか書き込みエラーが出てたので、
取ってます。Live2chのバグかな?
0496nobodyさん04/09/11 00:53:30ID:???
>>495
その理由が分からない時点で(ry
0497nobodyさん04/09/11 02:18:02ID:???
<TR>
<TD>
</TD>
</TR>
0498nobodyさん04/09/11 02:19:16ID:???
&lt;TR&gt;
&lt;TD&gt;
&lt;/TD&gt;
&lt;/TR&gt;

って書いてみた。
0499nobodyさん04/09/11 02:19:56ID:???
>>497=>>498
です。
050049204/09/11 11:14:18ID:???
何となく理由が分かりました。
<html:text name="hogeForm" property='<%= "_dataList[" + i + "].key1" %>' />
の様な書き方をすると、取得は出来るようですが、
セットする場合、に_dataListがnullになっているのでセット出来ないと
言っているのではないかと思います。

そこで、Submitした後も_dataListをnullにならない様にしたいのですが、
何か良い方法は無いのでしょうか?
ご存じの方、ご教授下さい。
よろしくお願い致します。
0501nobodyさん04/09/11 13:31:55ID:???
どういうことをしたいのかわからんけど、
設計を変えたほうがいいよ。
050249204/09/11 14:00:05ID:???
ListにMapをセットして使用することは、よくあることだと思いますが、
Strutsではこういう使い方は出来ないと言うことでしょうか?

設計を変えるとしたら、どう変えるのが理想的でしょうか?
0503nobodyさん04/09/11 14:01:10ID:???
>>500
List型のプロパティに値をセットするときは、セットする前に
リストの要素を用意しておく必要がある。
方法はいろいろあるが、俺はActionFormのreset()メソッド内で
リストの要素を用意しておくことが多いかな
0504nobodyさん04/09/11 14:02:12ID:???
>>502
501は気にするな。自分でやったこともないのに適当に回答しているだけと思われ。
0505nobodyさん04/09/11 14:21:43ID:???
ListのなかのMapに値をsetできないってことか?
そりゃそうだろう。
0506nobodyさん04/09/11 14:30:29ID:???
>>505
そうとも言い切れない
ActionFormのsetterの実装に依るだろう
050749204/09/11 16:22:58ID:???
503さんの意見を参考に、
resetメソッド内で事前にセッションにセットしたリストを取得する様にしてみました。
if (_dataList == null) {
HttpSession session = request.getSession();
List list = (List)session.getAttribute("hogeList");
_dataList = list;
}

すると例外は出なくなりましたが、
TEXTフィールドに入力した値がセットされません。
JSPのproperty='<%= "_dataList[" + i + "].key1" %>'の部分の書き方が悪いのかな?
というところまでは分かるのですが、どう変えたら良いのでしょうか?
何度もすみませんが、よろしくお願いします。

0508+++04/09/11 23:14:45ID:???
出来ないんなら、まあそうなんじゃなかろか。誰か知ってるかも知らんけど。
とりあえず"dataList[0].key"の形でrequest.getParameterに入ってくるので、
それを読むか。
通常こういう場合、
<logic:iterate id="data" name="hogeForm" property="_dataList">で回して、
<html:text name="data" property="key1" indexed="true" />じゃあないかと
思うんだけど。結果は変わらないけど。
0509nobodyさん04/09/12 09:58:09ID:???
なんでreset()でやるんだろう
表示(初期化)のためのActionの中で必要な情報をcollectionに詰めて、formにsetすりゃいいだけじゃん?
0510nobodyさん04/09/12 10:16:59ID:???
>>509
ActionFormがrequestスコープの場合はダメ。
毎回のリクエスト受信時にActionFormのインスタンスは新たに生成され、
初期化処理で扱うActionFormのインスタンスと送信後に扱うActionFormのインスタンスは別になるから。
0511nobodyさん04/09/12 20:53:02ID:???
何か問題ある?
送信先で同じActionFormを使ってやりゃいいだけじゃん。
0512nobodyさん04/09/12 21:14:53ID:???
>>511
>>509のやり方では送信先のActionFormのインスタンスの中のListプロパティの中が空っぽのままだろ?
051349204/09/13 09:40:19ID:???
>>512
そうなんです。
>>509の方法だと、Listがnullになってしまうんです。
だから、property='<%= "_dataList[" + i + "].key1" %>'の書き方だと、
_dataList[0].key1という名前になり、それをActionSetvletか何かで、
_dataList.get(0).put("key1","hogehoge")というようなメソッドを呼んでると思うのですが、
_dataListがnullだからNullPointerExceptionが出るのだと思います。
051449204/09/13 10:35:16ID:???
みなさん、色々とアドバイスをいただき、
ありがとうございました。
結局、現在はActionFormに以下のソースを追加しました。
private String[] key1 = null;
private String[] key2 = null;
public String[] getKey1() {
 return key1;
}
public void setKey1(String[] k) {
 this.key1 = k;
}
public String[] getKey2() {
 return key2;
}
public void setKey2(String[] k) {
 this.key2 = k;
}

画面表示時は、以下の様にしてListの内容を出力し、
<logic:iterate id="list" name="hogeForm" property="_dataList">
<html:text name="list" property="key1" />
<html:text name="list" property="key2" />
</logic:iterate>
ActionFormにセット時はString配列にセットする様にして
処理しています。

でも、このやり方は邪道だと思っています。
もし他に良い方法がありましたらご教授下さい。
0515nobodyさん04/09/13 22:16:56ID:uejohbjj
Actionクラスの中でConnectionを取得してDBアクセスしてるコードが沢山あるんですけど、
何か弊害ありますか?
0516nobodyさん04/09/13 22:28:03ID:???
>>515
ビジネスロジックをActionクラスに書くな
0517nobodyさん04/09/13 22:31:27ID:uejohbjj
なにか弊害ありますか?
0518nobodyさん04/09/13 23:11:38ID:???
>>515
ビジネスロジックを使い回しできない
0519nobodyさん04/09/13 23:40:40ID:???
515じゃないけど、それって一般的なコードでの
モジュール化をするかしないかの違いでしかないの?
もうちょっと説得力のある理由があるのかとおもった。

そのAction固有のロジックで複雑でもなければとりあえずそこに書いといて、
必要になったときにリファクタリングで括りだす方針でも問題ないような。
Actionはシングルトンだから書けないロジックもあるのはわかるけど。
0520nobodyさん04/09/14 08:03:53ID:???
まあ、好きにすれば?
0521nobodyさん04/09/14 21:28:50ID:???
そのビジネスロジックを使い回したくなってから、わざわざリファクタリングするのか?
MVCの利点が理解できなきゃこれも理解できないだろうけど。
0522nobodyさん04/09/14 21:46:02ID:???
まあ、この辺でも読んでおけ
http://struts.apache.org/userGuide/building_controller.html#action_design_guide
0523nobodyさん04/09/14 22:30:17ID:???
>>521
Action をモデルとみなしてはいけない理由を教えてください。
0524nobodyさん04/09/14 22:41:16ID:DrU+5VXT
先輩がActionクラスに入るはじめのところでコネクションを取得して、
そのあとActionから抜けるまで使いまわすようなフレームワーク作ってるんですけど
どうしたらいいですか?
Actionクラスのメソッドの引数にconnとかがあります!
0525nobodyさん04/09/14 22:47:21ID:???
>>524
読解不能
0526nobodyさん04/09/14 22:52:17ID:DrU+5VXT
先輩みっけ
0527nobodyさん04/09/14 23:27:05ID:???
>>524
Action の最初と最後をトランザクション境界にしてるんだろ。
違うのか? それはそれでありだと思うが。
ただ、Action クラスを継承して作ってんだったら、その先輩はうんこかな?
RequestProcessor を拡張し、コネクションは ThreadLocal から取得する
ようにしたほうが良い。Action のインタフェースも変える必要はない。

もちろん、この Action をモデルとして考えた場合の再利用性は低くなる。
が、プロジェクト内での再利用性は十分だし、開発効率も高い。
0528nobodyさん04/09/16 00:01:38ID:???
メテオはやめてお
0529nobodyさん04/09/17 00:11:06ID:UID/DeJQ
Actionで取得したconnectionをAction抜けた後のfilterでクローズしてみようかと思ってるんだけど
そういう構成ってどう思いますか?
0530nobodyさん04/09/17 00:46:12ID:???
>>529
「Action抜けた後のfilter」って何?
0531nobodyさん04/09/17 00:50:37ID:UID/DeJQ
filterクラスってあるじゃん、知らないの?
*.doに仕掛ければ*.doアドレスのやつは全部そのfilter掛かるんだよ。
0532nobodyさん04/09/17 21:28:32ID:???
>>531
俺はありだと思うよ。n階層モデルにおもっきり逆行してるが。
0533nobodyさん04/09/17 23:01:21ID:???
>>531
俺もありだと思うよ。
これから退職届けだして、それを引き継いだやつを地獄に落とすんだろ。
0534nobodyさん04/09/18 00:44:57ID:???
俺はアリ?だと思うよ
アリ?こりゃおっかしいなぁ〜

寒いわボケ しね
0535nobodyさん04/09/18 00:59:53ID:???
モハメド・アリ
0536nobodyさん04/09/18 01:00:21ID:???
アリさんマークの引っ越し社
0537nobodyさん04/09/22 04:52:07ID:???
>>529
むしろfilterでコネクション取得して、切断。
Hibernateだと、「Open session in view」ってなってるから、さしずめ「Open connetion in view」だろうか。
0538nobodyさん04/09/22 04:55:09ID:???
>>527
Spring StrutsやらS2Struts使って、AOPでやればもっとよいかも。
0539nobodyさん04/10/08 11:41:11ID:???
Struts初心者の者です。
現象として、ApplicationResourcesに設定してあるメッセージを取得できません。

struts-config.xmlには、
<message-resources parameter="res.ApplicationResources"/>
と設定して、ApplicationResourcesファイルの階層も間違っていないのですが。

どうやら、ローカルサーバーのApplicationResourcesを見ずに、ビルドした
ローカルの階層を見ているようで、こちらに設定するとメッセージは取得出来ます。

Tomcat 5.0
Struts1.1
を使用しています。

何か他に設定が必要なのでしょうか?
どなたかお教えいただけないでしょうか? m(_ _)m
0540nobodyさん04/10/08 19:54:12ID:???
>どうやら、ローカルサーバーのApplicationResourcesを見ずに、ビルドした
>ローカルの階層を見ているようで、こちらに設定するとメッセージは取得出来ます。

よくワカンネ
0541nobodyさん04/10/08 20:24:16ID:???
srcじゃなくてclassesフォルダのファイル見てるってこと?
それだとそれで正しい挙動だと思う。
0542nobodyさん04/10/10 23:48:18ID:d05ou0eX
上司にStrutsが現在における最高のMVCモデルフレームワーク(Webアプリにおいて)だと言われ、本を渡されたんですが本当ですか?
0543nobodyさん04/10/11 00:26:05ID:???
>>542
賛否両論だが仕事でJavaでwebやるならとりあえず覚えておけ。
Java-webフレームワークの中では最高に普及していることは間違いない。
0544nobodyさん04/10/11 00:27:51ID:???
モノとしてはTapestryやらWebWork2の方がよさげだね。
0545nobodyさん04/10/11 09:30:05ID:???
>>544
俺もそう思うけど、仕事で使うなら普及してるのが一番だしね。
しょうがないね。
0546nobodyさん04/10/11 12:49:36ID:???
SpringやらSeasar2と一緒に使えば、StrutsでもWebWork2の利点みたいなことはできるわけだからねぇ。
あんまり末端の層でブアツイフレームワークは必要ない気がする。
0547nobodyさん04/10/11 14:55:13ID:???
何が最高だか聞いてみたら?
普及度? シンプルさ? 軽量さ? 機能? 脳内知識?

2位と3位のフレームワークも上げて欲しい。
0548nobodyさん04/10/11 18:24:22ID:???
Struts+Seasar2とかHibernateとかでもうしばらく頑張る。
その後JSFに以降。
0549nobodyさん04/10/11 18:28:05ID:???
Struts-facesでいいんじゃねぇ?
055054204/10/11 22:46:32ID:1ye9esf4
ええ?そうなんですか?いろいろあるんですね〜。ありがとうございます。でもどうせ勉強するなら最高の組み合わせを考えてるんですけど、結論出ませんかね?自分としては仕事で使うので普及率で決めたいんですが
0551nobodyさん04/10/12 03:07:49ID:???
普及率で決めるならSeasar2は使えないな。
0552nobodyさん04/10/12 21:26:32ID:???
「普及度」の「最高」だったら、struts+hibernateかな? 商用のWebLogicとかWebSpなんとかの方かな?
0553nobodyさん04/10/12 21:45:34ID:???
Struts + Hibernate + Spring だろうね。
0554nobodyさん04/10/12 22:53:10ID:???
その組み合わせっていいの?
0555nobodyさん04/10/13 16:12:45ID:???
Strutsを使って開発する場合、セッション管理ってどうやってますか?
0556nobodyさん04/10/13 16:41:55ID:???
>>555
デフォでフォーム名のセッション変数作られまくりだからイヤってこと?
055755504/10/13 17:20:59ID:???
>>556
いえ、もしStrutsがセッション管理機能を持ってるんなら
そっち使いたいなぁって思っただけです。
Struts初心者なもんで。。。
0558nobodyさん04/10/13 18:40:06ID:???
>>557
セッション管理なんて、sessionにほりこむだけじゃん。
わざわざStrutsにやらせんでも。

ってか、何やらせたいん?
0559nobodyさん04/10/13 19:07:31ID:???
Servletの低レベルなセッション変数管理ではなくて、
もっとアプリ寄りの高級なセッション管理ってことかな?
そういうのなら残念ながらない。
056055504/10/13 19:17:18ID:???
>>559さんのおっしゃるとおりです。
そうですか、そういう管理機能は持ってないんですね。。。
今までどおりsession.getAttribute()でがんばります。ありがとうございました。
0561nobodyさん04/10/13 22:38:10ID:???
具体的に、なにがやりたいん?
056254204/10/15 16:31:49ID:yJKQCGu4
実は私ずっとJAVAでソフト開発してたんですが、この度Webアプリ開発なる部署に転属になりまして、質問させていただいた次第でございます。
で、いきなりstrutsの本を渡されたんですが、読んでるとJSPやサーブレットのことを知らないとまずいですね、多分当たり前な話なんでしょうが
もうびっくりして別の書籍買ってきました。JSPとサーブレットに関しての本です。すると今度はXMLやらXSLTやらDOMやら出てきましたので
それも購入して読みあさった結果「これは腰を据えて取り組まなきゃいかんのでは?上司が言うように簡単にはいかん。」と思いました。
そこで質問なんですが、Webアプリ開発担当になるためには、JSP/サーブレット→XML/XSLT/DOM→strutsというような勉強の順番でいいですかね?
私は恥ずかしながらJAVA歴1年で去年1年間とある予約システム(店頭で店員がいじるソフト)の開発しかやったことありません。
オブジェクト指向はわかりますが、ネットワークアプリの開発もしたことありません。サーブレットは簡単そうなんですが、Web関係の技術は無知です。
どうなんでしょう?それともこの異動はもしかしてリストラの前兆ですかね?入社1年目にして?ぎゃって感じです・・・
056354204/10/15 16:40:48ID:yJKQCGu4
え〜ちなみに上司や同僚は忙しいらしくて取り合ってくれません。Web開発の部署は東京にあるんで
岡山から先月引っ越してきました。なんだか前の部署(企業向けアプリ)の方がUMLの段階から
ノンキで仲良くやってたんですが、ここでは皆無口でPCに向かったまま、話し掛けると無視されます。
UMLも他の部署がしてるみたいで、ここの人はみんななんか機械やロボットのようです。
私はそんな片隅で自習です・・・他にも同じような人が3人いるんですが、みんな「??」状態です。
やばいですかね?業界のこともよくわからんですし、前の雰囲気が当たり前だと思ってたし
独学でやる気はあるんですが、どこから手をつければいいかわかんなくて・・・
0564nobodyさん04/10/15 19:09:33ID:???
>>562-563
ながい
■ このスレッドは過去ログ倉庫に格納されています