フレームワークStrutsをいじくり倒す人の為のスレ
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/04/28 08:14ID:Ub0n1fGRhttp://www.ingrid.org/jajakarta/struts/
http://jakarta.apache.org/struts/
0404nobodyさん
04/07/04 00:52ID:B3Fr8XMmテンプレートはどこにある?
0405nobodyさん
04/07/04 01:02ID:B3Fr8XMmApache Strutsフレームワークについて語るスレ
△△もまいら漏れにStrutsの良さを教えてください
http://pc5.2ch.net/test/read.cgi/tech/1048030962/
△△つづいて漏れにStrutsの良さを教えてくだっさい
http://pc5.2ch.net/test/read.cgi/tech/1068207164/
0406nobodyさん
04/07/04 01:10ID:B3Fr8XMm△△さらにStrutsの良さを教えて下さいSession3
http://pc5.2ch.net/test/read.cgi/tech/1088870989/
0407nobodyさん
04/07/24 23:55ID:QLmLFMYlstackTrace---
java.lang.NullPointerException
at org.apache.struts.taglib.tiles.InsertTag.processAttribute(InsertTag.java:689)
at org.apache.struts.taglib.tiles.InsertTag.createTagHandler(InsertTag.java:489)
at org.apache.struts.taglib.tiles.InsertTag.doStartTag(InsertTag.java:451)
at org.apache.jsp.aa_jsp._jspx_meth_tiles_insert_0(aa_jsp.java:118)
at org.apache.jsp.aa_jsp._jspService(aa_jsp.java:85)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
aa.jspがtilesのtaglib使ってるJSPです。
tilesのxml----
<tiles-definitions>
<definition name="test" path="/jsp/aa.jsp">
<put name="xxxTest" value="/jsp/bb.jsp"/>
</definition>
</tiles-definitions>
bb.jspはtestとか書かれてるだけです。
0408続き
04/07/24 23:56ID:???<plug-in className="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/conf/tiles-defs.xml"/>
<set-property property="moduleAware"value="true"/>
</plug-in>
aa.jsp----
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %>
<html:html>
<body>
<tiles:insert attribute="xxxTest"/>
</body>
</html:html>
web.xml----
<taglib>
<taglib-uri>/WEB-INF/taglib/struts-tiles.tld</taglib-uri>
<taglib-location>/WEB-INF/taglib/struts-tiles.tld</taglib-location>
</taglib>
pageContextから値がとれてないようなんだけど、なぜ取れないのかがわからないです。。
0410407
04/07/25 01:45ID:???うん。してない。Action通してaa.jsp呼んでるよ。
0412nobodyさん
04/07/25 01:55ID:???<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %>
<tiles:insert definition="test" flush="true" />
として、Tiles設定ファイルで定義した"test"という定義を呼ばないとダメ。
0413407
04/07/25 01:55ID:???0415nobodyさん
04/07/25 01:59ID:???<action path="/xxx"
type="xxxAction"
name="xxxForm"
scope="request">
<forward name="xyz" path="test" />
</action>
<controller processorClass="org.apache.struts.tiles.TilesRequestProcessor" />
Struts設定ファイルのcontroller タグでRequestProcessorにTilesRequestProcessorを
使うように指定してあれば、forwardタグのpath属性にTiles定義名を指定できる。
0416nobodyさん
04/07/25 02:03ID:???aaa.jsp内にaa.jspとbb.jspがでてくるような状態になるの?
なんかaaa.jspが無駄のように感じるけど・・。
0417407
04/07/25 02:05ID:???おぉそういうこと!
それでいけそうだ。
ありがとう。
0418nobodyさん
04/07/25 12:03ID:???Strutsで、ボタンをクリックしたら繊維するようにしてるのですが、
その際、一部で空白のページが表示されてしまいます。
開発の中でこのような症状に出会った人いらっしゃいませんか?
もう3日悩んでます(´・ω・`)
知り合い曰く、「フォワード先が見つからないとそうなる」と言われたのですが
JSPで<html:submit property="xxx" />として、
struts-config.xmlで、<action ・・・><forward name="xxx" path="/xxx.html" /></action>
Actionクラスで、return mapping.findforward("xxx")
となっていることは何度も確かめたのですが・・・
0419nobodyさん
04/07/25 15:48ID:???<html:submit property="xxx" />
<forward name="xxx" path="/xxx.html" />
と 3 つ xxx が出てくるけど
0420418
04/07/25 18:49ID:???すいません、ゴチャゴチャにならないように同じ名前付けてるんです(;´Д`)
別の名前をつけるとしたら↓のような感じになるとおもいます。
[JSP]
<submit value="次へ" property="nextpage" />
[Action]
if( form.getNextpage() != null ) {
//・・・・・色々処理
return mapping.findForward("next");
}
[struts-config.xml]
<action ・・・><forward name="next" path="/sample.html" /></action>
JSPの方に問題があるかわからなかったので、ここではデバッグ用に普通のHTMLファイルにフォワードしています。
0421nobodyさん
04/07/25 19:05ID:???0422nobodyさん
04/07/25 21:21ID:???0423418
04/07/26 21:57ID:???サーバ管理者がStruts1.0を入れていたのが原因でした。
私はexecute()メソッドを実装していたので
perform()メソッドに書き換えたら無事動きました。
このようなアホな質問にも真摯に答えてくださった419さん,421さん,422さん
本当にありがとうございました。
0424nobodyさん
04/07/26 22:40ID:YWaIeQt8<definition name="xxx" path="template.jsp">
<put name="aaa" value="insert.jsp"/>
</definition>
[template.jsp]
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %>
<html:html>
<body>
<tiles:insert attribute="aaa" beanName="aaForm"/>
</html:html>
[insert.jsp]
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-bean.tld" prefix="bean" %>
<bean:write name="???" property="date"/>
上記のような状態で、template.jspで指定したBean(aaForm)の中身の値を
insert.jspに渡したいのですが、どのようにtilesの下の属性のJSPに
beanの値を渡せるのでしょうか。aaFormの内容は動的に変化します。
0425424
04/07/27 01:10ID:???両方みてるのでどちらかにレスを下さった時点でその旨を報告します。
0426nobodyさん
04/07/27 01:59ID:???0427nobodyさん
04/07/27 11:52ID:???0428425
04/07/27 12:13ID:???0429425
04/07/27 21:58ID:???bean:defineで解決しました。
[template.jsp]
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/taglib/struts-tiles.tld" prefix="tiles" %>
<html:html>
<bean:define id="form" name="aaForm"/>
<body>
<tiles:insert attribute="aaa" beanName="form"/>
</html:html>
[insert.jsp]
<%@ page contentType="text/html; charset=MS932" %>
<%@ taglib uri="/WEB-INF/taglib/struts-bean.tld" prefix="bean" %>
<bean:write name="aaa" property="date"/>
0430425
04/07/27 22:23ID:???誤:<bean:write name="aaa" property="date"/>
正:<bean:write name="form" property="date"/>
0431セキュリティ
04/08/05 00:50ID:JUf/Rg2G分かる方いますか?通常とおりにBASIC認証の設定をしても
URLが○○Action.doとか○○Return.doとかなのでJSPと指定した
ディレクトリ内のJSPだと認識してくれず、認証がかかりません。
指定したディレクトリに認証掛けるのではなく、指定したURLに認証を
掛けることってできるのでしょうか。
0432nobodyさん
04/08/05 05:26ID:???・サーブレットコンテナ側でベーシック認証
・redirectするようにする
とか?
0433nobodyさん
04/08/05 07:21ID:???出来るよ。
でもそれは Struts とは関係のない世界。
使ってる Web サーバすら書いてないから答えられないけどね。
0434セキュリティ
04/08/07 00:35ID:eCns8z8W情報が足りなくすみません。WEBサーバはtomcatをコンテナにapacheを利用しています。
OS:RedhatLinux
AP:apache1.3.28
tomcat5.0.19
調べたところ、JSPの配置場所を変えればなんとかなりそうなのですが、
元々strutsでの開発を考えてなかったようでWEB-INFと同階層にJSP用の
フォルダが配置されています。そのため、現在の配置に対応するためには
JSP側のsubmitとstruts-conf側のactionの中でパスを追加しなくては
ならないみたいです。
ソースはいじらずに設定したいのですが、apacheやtomcatだけの設定で
どうにかならないでしょうか。
例】
DcumentRoot:/apl
jspの位置:/apl/test
1)http://www.hogehoge.co.jp/apl/test/sys1/hoge.jsp
2)http://www.hogehoge.co.jp/apl/HogeHoge.do
上記の例で1)のURLであればhtaccessでパスを解釈するのですが、
同じjspファイルを呼び出してもstrutsを使ったシステムでは2)の
URLのように表示されるため、ファイルパスがapacheで解釈されずに
制限を掛けたにも関わらず、画面が表示されてしまいます。
>432
tomcatでのベーシック認証でもパスの関係で上手く動作しませんでした。
redirectの設定についてもう少し調べてみたいと思います。
>433
何か方法があれば教えてください。よろしくお願いします。
また、もしできたら結果報告したいと思います。
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ではこういう使い方は出来ないと言うことでしょうか?
設計を変えるとしたら、どう変えるのが理想的でしょうか?
■ このスレッドは過去ログ倉庫に格納されています