フレームワークStrutsをいじくり倒す人の為のスレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/28 08:14ID:Ub0n1fGRhttp://www.ingrid.org/jajakarta/struts/
http://jakarta.apache.org/struts/
0470nobodyさん
04/08/24 17:42ID:CGoWFOLWinit.do(初期化Action) => input.jsp(入力フォーム) => input.do(入力Action)
のように初期化するだけのActionを設けて、そこから遷移させるもんなんでしょうか?
それともinput.jspの先頭でFormBeanを操作する?
0471nobodyさん
04/08/24 17:46ID:???0472470
04/08/24 17:58ID:???速レスどうも。
メンテを考えるとできるだけ一般的な手法をとりたいのですが、
はじめてのStrutsなので結構難儀してます。
参考になりました。
0476nobodyさん
04/08/25 09:48ID:???それの入力内容を配列に格納したい時って
たとえば
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:???もしかしてスレちがいの話題?
Strutsなら直接request#getParameter()はしない。
>>475
> それ、ActionFormの初期化じゃなくてinput.jspの初期設定ね
ここよくわからん
0478476
04/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:???たまたま。
実際にはHTMLで記述された順に送信するブラウザがほとんどだし、
そういう動作をしないブラウザを俺も知らないが
仕様上保証されているものではないので、順不同で送信する
ブラウザがあっても(既存のブラウザが将来のバージョンでそうなっても)
文句は言えないよ。
0483nobodyさん
04/08/26 14:39ID:???ってありますかね?
あったら便利なんだけど
0484nobodyさん
04/08/26 15:24ID:???ActionFormのメンバ変数に保持させるのはあまり宜しくない?
やっぱ自作のBeanを作ってそれをインスタンス化して格納して
セッションに入れた方が良いのか?
0485nobodyさん
04/08/27 13:25ID:???JSPでタグを使って
Beanのプロパティを表示したいのですが、
このBeanってもしかしてシリアライゼーブルをインプリメントしていないと
タグを使ってもとりだせないのでしょうか?
0486nobodyさん
04/08/27 13:38ID:???うまくいきません、恐らく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:???サーバ : 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として出力させる方法がありましたら
教えていただきたいです。よろしくお願いします。
0489488
04/09/08 10:15ID:???<html:xhtml />
このタグを各パートのjspに入れれば解決できました。
スレ汚し失礼しました。
0491nobodyさん
04/09/09 00:47ID:nnK3UDEH0492nobodyさん
04/09/10 16:26:19ID:???表示は可能なんですが、Submitしたら次のアクションに行く前に
[BeanUtils.populate]: java.lang.NullPointerExceptionが発生します。
やはりリストの中のマップに値をセットするのは無理なのでしょうか?
何か良い解決策をお持ちの方、ご教授下さい。
次の発言にソースを記述します。
0493nobodyさん
04/09/10 16:28:43ID:???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:???<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のバグかな?
0497nobodyさん
04/09/11 02:18:02ID:???<TD>
</TD>
</TR>
0498nobodyさん
04/09/11 02:19:16ID:???<TD>
</TD>
</TR>
って書いてみた。
0500492
04/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:???設計を変えたほうがいいよ。
0502492
04/09/11 14:00:05ID:???Strutsではこういう使い方は出来ないと言うことでしょうか?
設計を変えるとしたら、どう変えるのが理想的でしょうか?
0503nobodyさん
04/09/11 14:01:10ID:???List型のプロパティに値をセットするときは、セットする前に
リストの要素を用意しておく必要がある。
方法はいろいろあるが、俺はActionFormのreset()メソッド内で
リストの要素を用意しておくことが多いかな
0505nobodyさん
04/09/11 14:21:43ID:???そりゃそうだろう。
0507492
04/09/11 16:22:58ID:???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:???表示(初期化)のためのActionの中で必要な情報をcollectionに詰めて、formにsetすりゃいいだけじゃん?
0510nobodyさん
04/09/12 10:16:59ID:???ActionFormがrequestスコープの場合はダメ。
毎回のリクエスト受信時にActionFormのインスタンスは新たに生成され、
初期化処理で扱うActionFormのインスタンスと送信後に扱うActionFormのインスタンスは別になるから。
0511nobodyさん
04/09/12 20:53:02ID:???送信先で同じActionFormを使ってやりゃいいだけじゃん。
0513492
04/09/13 09:40:19ID:???そうなんです。
>>509の方法だと、Listがnullになってしまうんです。
だから、property='<%= "_dataList[" + i + "].key1" %>'の書き方だと、
_dataList[0].key1という名前になり、それをActionSetvletか何かで、
_dataList.get(0).put("key1","hogehoge")というようなメソッドを呼んでると思うのですが、
_dataListがnullだからNullPointerExceptionが出るのだと思います。
0514492
04/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何か弊害ありますか?
0517nobodyさん
04/09/13 22:31:27ID:uejohbjj0519nobodyさん
04/09/13 23:40:40ID:???モジュール化をするかしないかの違いでしかないの?
もうちょっと説得力のある理由があるのかとおもった。
その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
0524nobodyさん
04/09/14 22:41:16ID:DrU+5VXTそのあとActionから抜けるまで使いまわすようなフレームワーク作ってるんですけど
どうしたらいいですか?
Actionクラスのメソッドの引数にconnとかがあります!
0526nobodyさん
04/09/14 22:52:17ID:DrU+5VXT0527nobodyさん
04/09/14 23:27:05ID:???Action の最初と最後をトランザクション境界にしてるんだろ。
違うのか? それはそれでありだと思うが。
ただ、Action クラスを継承して作ってんだったら、その先輩はうんこかな?
RequestProcessor を拡張し、コネクションは ThreadLocal から取得する
ようにしたほうが良い。Action のインタフェースも変える必要はない。
もちろん、この Action をモデルとして考えた場合の再利用性は低くなる。
が、プロジェクト内での再利用性は十分だし、開発効率も高い。
0528nobodyさん
04/09/16 00:01:38ID:???0529nobodyさん
04/09/17 00:11:06ID:UID/DeJQそういう構成ってどう思いますか?
0531nobodyさん
04/09/17 00:50:37ID:UID/DeJQ*.doに仕掛ければ*.doアドレスのやつは全部そのfilter掛かるんだよ。
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:???むしろfilterでコネクション取得して、切断。
Hibernateだと、「Open session in view」ってなってるから、さしずめ「Open connetion in view」だろうか。
0539nobodyさん
04/10/08 11:41:11ID:???現象として、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:???>ローカルの階層を見ているようで、こちらに設定するとメッセージは取得出来ます。
よくワカンネ
0541nobodyさん
04/10/08 20:24:16ID:???それだとそれで正しい挙動だと思う。
0542nobodyさん
04/10/10 23:48:18ID:d05ou0eX0543nobodyさん
04/10/11 00:26:05ID:???賛否両論だが仕事でJavaでwebやるならとりあえず覚えておけ。
Java-webフレームワークの中では最高に普及していることは間違いない。
0544nobodyさん
04/10/11 00:27:51ID:???0546nobodyさん
04/10/11 12:49:36ID:???あんまり末端の層でブアツイフレームワークは必要ない気がする。
0547nobodyさん
04/10/11 14:55:13ID:???普及度? シンプルさ? 軽量さ? 機能? 脳内知識?
2位と3位のフレームワークも上げて欲しい。
0548nobodyさん
04/10/11 18:24:22ID:???その後JSFに以降。
0549nobodyさん
04/10/11 18:28:05ID:???0550542
04/10/11 22:46:32ID:1ye9esf40551nobodyさん
04/10/12 03:07:49ID:???0552nobodyさん
04/10/12 21:26:32ID:???0553nobodyさん
04/10/12 21:45:34ID:???0554nobodyさん
04/10/12 22:53:10ID:???0555nobodyさん
04/10/13 16:12:45ID:???0557555
04/10/13 17:20:59ID:???いえ、もしStrutsがセッション管理機能を持ってるんなら
そっち使いたいなぁって思っただけです。
Struts初心者なもんで。。。
0558nobodyさん
04/10/13 18:40:06ID:???セッション管理なんて、sessionにほりこむだけじゃん。
わざわざStrutsにやらせんでも。
ってか、何やらせたいん?
0559nobodyさん
04/10/13 19:07:31ID:???もっとアプリ寄りの高級なセッション管理ってことかな?
そういうのなら残念ながらない。
0560555
04/10/13 19:17:18ID:???そうですか、そういう管理機能は持ってないんですね。。。
今までどおりsession.getAttribute()でがんばります。ありがとうございました。
0561nobodyさん
04/10/13 22:38:10ID:???0562542
04/10/15 16:31:49ID:yJKQCGu4で、いきなりstrutsの本を渡されたんですが、読んでるとJSPやサーブレットのことを知らないとまずいですね、多分当たり前な話なんでしょうが
もうびっくりして別の書籍買ってきました。JSPとサーブレットに関しての本です。すると今度はXMLやらXSLTやらDOMやら出てきましたので
それも購入して読みあさった結果「これは腰を据えて取り組まなきゃいかんのでは?上司が言うように簡単にはいかん。」と思いました。
そこで質問なんですが、Webアプリ開発担当になるためには、JSP/サーブレット→XML/XSLT/DOM→strutsというような勉強の順番でいいですかね?
私は恥ずかしながらJAVA歴1年で去年1年間とある予約システム(店頭で店員がいじるソフト)の開発しかやったことありません。
オブジェクト指向はわかりますが、ネットワークアプリの開発もしたことありません。サーブレットは簡単そうなんですが、Web関係の技術は無知です。
どうなんでしょう?それともこの異動はもしかしてリストラの前兆ですかね?入社1年目にして?ぎゃって感じです・・・
0563542
04/10/15 16:40:48ID:yJKQCGu4岡山から先月引っ越してきました。なんだか前の部署(企業向けアプリ)の方がUMLの段階から
ノンキで仲良くやってたんですが、ここでは皆無口でPCに向かったまま、話し掛けると無視されます。
UMLも他の部署がしてるみたいで、ここの人はみんななんか機械やロボットのようです。
私はそんな片隅で自習です・・・他にも同じような人が3人いるんですが、みんな「??」状態です。
やばいですかね?業界のこともよくわからんですし、前の雰囲気が当たり前だと思ってたし
独学でやる気はあるんですが、どこから手をつければいいかわかんなくて・・・
0565nobodyさん
04/10/15 19:44:28ID:???ドゾー
Webアプリ開発担当になるためには、JSP/サーブレット→XML/XSLT/DOM→strutsというような勉強の順番でいいですか
0566nobodyさん
04/10/15 19:55:18ID:???それよりWebアプリ特有の設計をなんとかして学ぶ。Struts本くれたのもざっと
全体見渡せってことじゃないかと。しかしJava歴一年で「ずっとJAVAでソフト開発してきた」とは
大きく出たな。
>>565
まだ横に長い
0567nobodyさん
04/10/15 21:16:44ID:???そうじゃなければ別にイラン。
例えばstrutsは設定ファイルがxmlなだけで、別にxmlの知識が要るわけじゃないし。
0568542
04/10/15 21:35:15ID:yJKQCGu4すいません。長々と書いてしまいまして。
>しかしJava歴一年で「ずっとJAVAでソフト開発してきた」とは大きく出たな。
すいません。偉そうに言ってしまいました。「1年しか」ですね^^;
>>566 >>567
ご返答ありがとうございます。勉強方法がわかってとても安心しました。
とりあえずJSP/サーブレット→strutsという風に勉強します。
■ このスレッドは過去ログ倉庫に格納されています