[Seasar-user:8154] Re: [Teeda] forEachのinputタグの処理で
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
2007年 6月 7日 (木) 14:31:02 JST
大谷です。
現在のTeedaではForEach内の項目をJavaScriptで
削除したりして、サーバ側で抑えている行数とあわなくなると
下記のような例外が発生します。
方法としては、JavaScriptで本当に削除するのではなく、
削除フラグを立てた上で非表示にしておいて、submitされたときに
サーバ側でフラグが立っているものを削除するのが最善ではないかと
思います。
宜しくお願いします。
6 Jun 2007 16:25:13 +0900 に 山下 真里<[E-MAIL ADDRESS DELETED]> さんは書きました:
> いつもお世話になっております。
>
> 山下 真里です。
>
> Teeda 1.0.7のforEachを利用し、画面上にテーブルの一覧を表示し、
> 対象のデータを削除するプログラムを作成しております。
>
> 画面上のリスト表示後、画面上の「削除」ボタンを押し、その後、
> JavaScriptでhiddenで対象のキーをセットし、Post処理に入ると、初回は必ず、
> 下記のエラーが発生します。
>
> ====================================================================================
> 0
> java.lang.ArrayIndexOutOfBoundsException: 0
> at org.seasar.teeda.extension.component.TForEach#processUpdates (TForEach.java#382)
> at javax.faces.component.ComponentUtil_#processAppropriatePhaseAction (ComponentUtil_.java
> #51)
> at javax.faces.component.UIForm#processAppropriateAction (UIForm.java#85)
> at javax.faces.component.UIForm#processUpdates (UIForm.java#68)
> at javax.faces.component.UIComponentBase#processUpdates (UIComponentBase.java#447)
> at javax.faces.component.UIComponentBase#processUpdates (UIComponentBase.java#447)
> at javax.faces.component.UIViewRoot#processUpdates (UIViewRoot.java#110)
> at org.seasar.teeda.core.lifecycle.impl.UpdateModelValuesPhase#executePhase (UpdateModelVa
> luesPhase.java#30)
> at org.seasar.teeda.core.lifecycle.AbstractPhase#execute (AbstractPhase.java#55)
> at org.seasar.teeda.core.lifecycle.LifecycleImpl#execute (LifecycleImpl.java#90)
> ====================================================================================
>
> その後、ブラウザの戻るボタンで戻り削除処理をすると正常動作します。
> 何が問題でこのような現象が発生しているか、分りかねましたので
> 投稿させていただきました。
>
> お手数をおかけしますが、ご存知の方がいらっしゃいましたら、
> ご教授お願いできないでしょうか?
>
> よろしくお願いいたします。
>
>
>
> =================== エラー発生時のトレース ========================================
> DEBUG 2007-06-06 16:08:56,265 [http-8080-1] HOT deployを開始します
> DEBUG 2007-06-06 16:08:56,296 [http-8080-1] クラス(net.mtog.ao.web.setting.StationEditPage[s
> etting_stationEditPage])のコンポーネント定義を登録します
> DEBUG 2007-06-06 16:08:56,328 [http-8080-1] クラス(net.mtog.ao.dao.YStationDao[yStationDao])
> のコンポーネント定義を登録します
> DEBUG 2007-06-06 16:08:56,359 [http-8080-1] 0
> java.lang.ArrayIndexOutOfBoundsException: 0
> at org.seasar.teeda.extension.component.TForEach.processUpdates(TForEach.java:382)
> at javax.faces.component.ComponentUtil_.processAppropriatePhaseAction(ComponentUtil_.java:5
> 1)
> at javax.faces.component.UIForm.processAppropriateAction(UIForm.java:85)
> at javax.faces.component.UIForm.processUpdates(UIForm.java:68)
> at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:447)
> at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:447)
> at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:110)
> at org.seasar.teeda.core.lifecycle.impl.UpdateModelValuesPhase.executePhase(UpdateModelValu
> esPhase.java:30)
> at org.seasar.teeda.core.lifecycle.AbstractPhase.execute(AbstractPhase.java:55)
> at org.seasar.teeda.core.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:92)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
> java:290)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206
> )
> at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(HotdeployFilter.java:6
> 3)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
> java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206
> )
> at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2ContainerFilter.java:
> 63)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
> java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206
> )
> at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
> java:235)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206
> )
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.j
> ava:634)
> at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
> at java.lang.Thread.run(Unknown Source)
> DEBUG 2007-06-06 16:08:56,375 [http-8080-1] HOT deployを終了しました
> DEBUG 2007-06-06 16:08:56,375 [http-8080-1] HOT deployを開始します
> DEBUG 2007-06-06 16:08:56,375 [http-8080-1] クラス(net.mtog.ao.web.error.ErrorPage[error_err
> orPage])のコンポーネント定義を登録します
> DEBUG 2007-06-06 16:08:56,390 [http-8080-1] HOT deployを終了しました
>
> ======================================================================================
>
> ================ html ==============================================================
> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
> <head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <script type="text/javascript" src="http://express.heartrails.com/api/express.js"></script>
> <script type="text/javascript">
> //<![CDATA[
>
> function stationDel(yadoStationId) {
>
> document.getElementById("delstnId").value = yadoStationId;
>
> }
>
> // ]]>
> </script>
> </head>
> <body >
> <form id="Form">
> <div><span id="allMessages"></span></div>
> <span id="msg"></span>
> <br />
> <table border="1" width="600">
> <tr>
> <td>路線名</td><td>駅名</td><td> </td></tr>
> <div id="stationItems">
> <tr>
> <td width="200"><span id="line">JR東海道本線</span></td>
> <td width="300"><span id="station">川崎駅</span></td>
> <td width="100">
> <input type="button" value="削除" id="doDelete" onClick="mock()" /></td></tr>
> </div>
> </table>
> <br />
> </form>
> </body></html>
>
> ====================================================================================
>
>
> ============================ Page 一部抜粋 =====================================
> private YStation[] stationItems;
>
> public YStation[] getStationItems() {
> return stationItems;
> }
>
> public void setStationItems(YStation[] stationItems) {
> this.stationItems = stationItems;
> }
>
>
> public String getDoDeleteOnClick() {
>
> String script = "stationDel(" + getId() + ")";
>
> return script;
> }
>
> public String doDelete() {
> System.out.println("##### CLICKED INDEX " + getDelstnId() + " #####");
> YStation yStation = new YStation();
> yStation.setYadoStationId(getDelstnId());
> getYStationDao().delete(yStation);
> return null;
> }
> ====================================================================================
>
>
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>
--
=============================
Shinpei Ohtani
[E-MAIL ADDRESS DELETED]
=============================
Seasar-user メーリングリストの案内