[Seasar-user:1892] Re: S2JSFの2重のforEachについて

ANC04864@NIFTY.NE.JP ANC04864
2005年 4月 28日 (木) 15:24:50 JST


ごうぎと申します。

本件について、調べてみると不具合のようです。
多重ループが処理されるように以下のパッチを作ってみました。
もう少し上手い方法があるかもしれませんが、ご参考になれば幸いです。

以上、宜しくお願いします。

---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---
--- s2jsf/src/org/seasar/jsf/component/ForEach.java.org	2005-04-27 00:21:37.057232000 +0900
+++ s2jsf/src/org/seasar/jsf/component/ForEach.java	2005-04-28 15:16:01.944065600 +0900
@@ -207,9 +207,15 @@
 		for (int i = 0; i < children.size(); ++i) {
 			UIComponent child = (UIComponent) children.get(i);
 			if (child instanceof EditableValueHolder) {
-				EditableValueHolder evh = (EditableValueHolder) child;
-				descendantComponentStates.put(child.getClientId(context),
-						new EditableValueHolderState(evh));
+				String clientId = child.getClientId(context);
+				String namingContainerId = 
+                  clientId.substring(0,
+                                     clientId.lastIndexOf( NamingContainer.SEPARATOR_CHAR));			
+				if ( namingContainerId.equals(this.getClientId(context)) ){
+						EditableValueHolder evh = (EditableValueHolder) child;					
+						descendantComponentStates.put(child.getClientId(context),
+								new EditableValueHolderState(evh));
+				}
 			}
 			saveDescendantComponentStates(context, child);
 		}
@@ -223,9 +229,15 @@
 			UIComponent child = (UIComponent) children.get(i);
 			child.setId(child.getId());
 			if (child instanceof EditableValueHolder) {
-				EditableValueHolder evh = (EditableValueHolder) child;
-				EditableValueHolderState state = (EditableValueHolderState) descendantComponentStates.get(child.getClientId(context));
-				state.restore(evh);
+				String clientId = child.getClientId(context);
+				String namingContainerId = 
+                  clientId.substring(0,
+                                     clientId.lastIndexOf( NamingContainer.SEPARATOR_CHAR));			
+				if ( namingContainerId.equals(this.getClientId(context)) ){				
+					EditableValueHolder evh = (EditableValueHolder) child;
+					EditableValueHolderState state = (EditableValueHolderState) descendantComponentStates.get(child.getClientId(context));
+					state.restore(evh);
+				}
 			}
 			restoreDescendantComponentStates(context, child);
 		}
---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<---8<--
--
 Shigeru Gougi  < [E-MAIL ADDRESS DELETED] >
 http://www.wingnest.com/gougi/




Seasar-user メーリングリストの案内