incubator-adffaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Böhringer Jochen <Jochen.Boehrin...@tcc-products.de>
Subject UIXComponetBase#findComponent() does not find components inside a TreeTable
Date Tue, 05 Dec 2006 15:36:35 GMT
Hello,

 

I am developing custom components to support drag and drop. This components are based on the
Trinidad PPR capabilities and Dojo for the drag and drop rendering. I have one Draggable component
and a DropZone component. If a Draggable component is dropped on a DropZone component the
client side Javascript executes a _adfspu() call which contains the draggable's client id
and the dropzone's client id. The decode method in my DropZoneRenderer parses the draggable's
id from the request and tries to find the corresponding component via UIXComponentBase#findComponent(id).

 

But if I place my Draggable inside a TreeTable the generated clientIds contain a digit to
express the row of the table the Draggable is part of:

 

e.g.: 
_id25:treeTableId:0:_id40
_id25:treeTableId:1:_id40
_id25:treeTableId:2:_id40
 
I prepend a NamingContainer.SEPARATOR_CHARACTER to advice the findComponent() method that
the id is an absolute one:
 
:_id25:treeTableId:0:_id40
:_id25:treeTableId:1:_id40
:_id25:treeTableId:2:_id40
 

But my findComponet call fails with the exception below. If I debug the findComponent method
I can see, that the the UIXComponentBase#_findInsideOf() method can't find the digit ids inside
the naming container of my treetable. Is there another possibility to get Access to my draggable
component from inside my dropzone Renderer? And is the behaviour of UIXComponentBase.findComponent
a bug or a known limitation?

 

As additional info: Even if I omit the prepended SEPERATOR_CHARACTER the findComponent method
fails with the same exception but a little bit different stack trace.

 

java.lang.IllegalArgumentException

      at org.apache.myfaces.trinidad.component.UIXComponentBase.findComponent(UIXComponentBase.java:450)

      at org.apache.myfaces.trinidad.component.UIXComponentBase.findComponent(UIXComponentBase.java:451)

      at org.apache.myfaces.trinidad.component.UIXComponentBase.findComponent(UIXComponentBase.java:451)

      at org.apache.myfaces.trinidadinternal.renderkit.core.xhtml.DropZoneRenderer.decode(DropZoneRenderer.java:152)

      at org.apache.myfaces.trinidad.component.UIXComponentBase.__rendererDecode(UIXComponentBase.java:1011)

 

my decode method:

 

      @Override

      public void decode(FacesContext context, UIComponent component) {

            if (component.isRendered()) {

                  DropZone dropZone = (DropZone) component;

                  Map<String, String> parameterMap = context.getExternalContext()

                             .getRequestParameterMap();

 

                  String source = parameterMap.get("source");

                  String clientId = component.getClientId(context);

                  String draggableClientId = parameterMap.get("draggableClientId");

 

                  if (draggableClientId != null && draggableClientId.length() >
0) {

                        Draggable draggable = (Draggable) component

                                   .findComponent(draggableClientId);

 

                        if ((source != null) && source.equals(clientId)) {

                             new DragAndDropEvent(component, draggable, dropZone)

                                         .queue();

                             System.out.println("Action event queued for value: "

                                         + dropZone.getValue());

                             if (getPartialSubmit(getFacesBean(component))) {

                                   PartialPageUtils.forcePartialRendering(context);

                             }

                        }

                  }

            }

      }

 

Regards

Jochen


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message