フレームワークStrutsをいじくり倒す人の為のスレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/28 08:14ID:Ub0n1fGRhttp://www.ingrid.org/jajakarta/struts/
http://jakarta.apache.org/struts/
0435nobodyさん
04/08/07 02:52ID:???勘違いしてないか?
認証は各ファイルに対して行うのではなく、リクエストに対して行うのだよ。
Servletがリクエストを受けるのなら、Servletのパスに対して認証を設定する。
Strutsに限った話ではないのだが。
0436nobodyさん
04/08/07 12:09ID:???*.jspのリクエストを受け取ったら全部エラーにしてしまえ
0437nobodyさん
04/08/07 12:31ID:???>調べたところ、JSPの配置場所を変えればなんとかなりそうなのですが、
>元々strutsでの開発を考えてなかったようでWEB-INFと同階層にJSP用の
>フォルダが配置されています。そのため、現在の配置に対応するためには
>JSP側のsubmitとstruts-conf側のactionの中でパスを追加しなくては
>ならないみたいです。
>ソースはいじらずに設定したいのですが、apacheやtomcatだけの設定で
>どうにかならないでしょうか。
どうにかしようとするな。
0438nobodyさん
04/08/07 13:31ID:s4CRkah5http://java-house.jp/ml/archive/j-h-b/027387.html
0439nobodyさん
04/08/07 22:12ID:???0440nobodyさん
04/08/08 04:45ID:AIqU/7Pnなんで433がサーバ書いてないだけで全く答えられないのか理解不能だが、フィルターとかweb.xmlに認証の設定書くとか、標準の範囲でもいろいろできると思う。
0441nobodyさん
04/08/11 20:11ID:???actionForward.setRedirect(true);
return actionForward;
でいけるとおもったけどダメみたい。
どうやるのが一般的?
0442nobodyさん
04/08/11 22:05ID:???え? それでリダイレクトしないのか?
それは他のところがまずいんじゃないの?
一般的にはそれか、<forward redirect="true" でしょ。
0443nobodyさん
04/08/11 23:04ID:???フィルターは Servlet 2.3 の仕様だろ。
古い AP サーバ使ってたら実現出来ないよね。
おまえの標準はどこからどこまで?
環境を書くのは当然の事だと思う。
0444nobodyさん
04/08/14 21:55ID:hGsyY8QCスマートな解決方法はありますか。
JSPの先頭で判定したり、WEB-INF以下に入れるってのは思いつくんですけど
前者は煩雑だし(カスタムタグつくればいいかもしれないけど)、
後者は管理しにくくなるので避けたいです。
0445nobodyさん
04/08/14 23:18ID:???0446nobodyさん
04/08/14 23:23ID:???どんな特殊な事情で煩雑になるんですか?
あ、>>445みたいに煽ってるわけじゃなくて、同じケースがあった場合を想定して参考にしたいので。
0447446
04/08/14 23:24ID:???「WEB-INF内だと管理しにくい」方です。
0449nobodyさん
04/08/15 00:28ID:???1つのフォームにボタンがたくさんある時に、そのボタンによって
分岐する場合で他にいい方法ない?
違うname同じvalueのボタンが大量にある場合は、Action内で分岐
していくしかないのかなぁ。
0450444
04/08/15 00:34ID:???一連のJSPがWEB-INF内と外で分かれてるのはわかりにくいのと、
そもそもWEB-INF内を触らせるのがこわいので。
ほかに思いつくのは拡張子jspをjspsとか適当に変えて、
拡張子でアクセス制限かけるとかかな。
0452nobodyさん
04/08/16 02:46ID:???0453nobodyさん
04/08/16 19:53ID:9tlzA3M2・OS:Windows XP ・strus1.1 を使用 ・インタフェースはHTML で主に OracleDBアクセス
・開発ツール JDeveloper 9.0.3 ・システムは OC4J 配下で稼動
HTMLのテーブルタグの形式で一覧表示しようする
と特定の日付範囲のデータを表示させようとすると、
テーブルタグの一部しか表示されないときがありますた。
[処理構成]
一覧表示は JSPで記述。Strutsのカスタムタグを使用して
アクション部JavaBean にセットされたものを表示。
[調査]
・アクション側でJavaBean にセットされたデータをログ出力させて
みたが特に問題はない模様。
・JSP側のタグなどもチェックしてみたが、問題はなさそうであるし
そもそも実行時には 例外が発生しないので構文自体には問題なし。
実は他の掲示板でもそうだんしたところ
OC4J(← Oracleアプリケーションサーバ付属のサーブレットコンテナ)
のバグでコンフィグファイルの編集でいけるとのこと回答
をいただいたけど、、やっぱりそれでもだめでした。
他にも同じようにはまった人いませんか?
で、デバッガーなど調査するためのなにか良い方法が
ありましたら教えてくださ
い。
併せて、参考になる資料のURLなどもあればおしえてー
0454nobodyさん
04/08/16 21:01ID:???0456nobodyさん
04/08/17 00:00ID:???ああ、あれだ。JSPに表示するバイト数の制限オーバーしたんじゃねーの。
確かデフォルト8KBだった気がする。それ広げてみたら。
0458453
04/08/17 01:43ID:KSTk5Ht9的外れな質問カキコにもかかわらず
アドバイスありがとうございます。
456様へ
そんな制限あったんですね。知りませんでした。
それやってみます。
457様へ
なんせこの手の開発はじめてなもんで、
どこかショボーイ抜けがあるオチがありそうな気が
して、サポートにヘルプまではという心境でした。
それに Oracle製品側じゃなくて
struts側のバクってうたがってまして、、、
ここの切り分けが下手糞なんですかネーあぅ。
とりあえず、アドバイスいただいたことやてみます。
0459nobodyさん
04/08/17 09:47ID:rYUQBx/N2chじゃなくてOTNのサポート掲示板で聞いた方がいいと思うよ。
知ってるかもしれないが入り口は
http://otn.oracle.co.jp/
0460nobodyさん
04/08/17 16:25ID:???jsp内に複数あるテキストボックスの入力内容を
1つの配列に渡したいのですが、やりかた教えてください。
ヒントだけでもいいですので・・・
0461nobodyさん
04/08/17 16:46ID:???ActionFormに配列で返すメソッドを設ける。
0462nobodyさん
04/08/18 11:24ID:???テキストボックスの数が動的に変化する場合、
それら入力値の値を取得するには
どうすりゃいいのでしょうか?
ActionFormの validateメソッドの中にゴリゴリ書くしかないのでしょうか?
======================================
<html:form action="/owner">
name1 : <html:text property="email"/><html:errors property="name1"/></br>
name2 : <html:text property="name"/><html:errors property="name2"/></br>
・
・
・
・
nameN : <html:text property="name"/><html:errors property="nameN"/></br>
<html:submit/><html:cancel/>
</html:form>
======================================
from.java
で、
private String[] name;
とかいうプロパティにセットしたいのだが、
462氏が言う配列として取得するにはどうすれば・・・
0466nobodyさん
04/08/18 23:52ID:???0467nobodyさん
04/08/19 21:49ID:???itareteで作ってるの?
それとも、自作?
どちらにしろ、すべてproperty="name"にすれば
form.javaで
String[] name = form.getName();
で取れる。
formはキャストしたものね。
0468nobodyさん
04/08/23 17:21ID:???配列で取る場合、格納される位置ってのは
保証されているんだろうか?
たとえばソース表示で右上から順に
格納されていくとか・・・。
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:???アリ?こりゃおっかしいなぁ〜
寒いわボケ しね
■ このスレッドは過去ログ倉庫に格納されています