[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>&nbsp;</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 メーリングリストの案内