The id counter in viewRoot.createUniqueId() are resetted (at least in
RI) on every request.
If on rerendering a new id is requested you get a already, on first
rendering created, existent id.
This is the case e.g. on tab switch, change of rendered attribute, ...
Regards,
Volker
2008/1/16, Bernd Bohmann <[EMAIL PROTECTED]>:
> Hello Volker,
>
> my experience is you should assign uniqueIds to components.
> What is the diffence between components created by application from a
> tag and inside a component?
>
> If not you get maybe some errors like this:
>
> If this component was created dynamically (i.e. not by a JSP tag) you
> should assign it an explicit static id or assign it the id you get from
> the createUniqueId from the current UIViewRoot component right after
> creation!
>
> If I have time i will checkin the files to reproduce the error.
>
> Regards
>
> Bernd
>
> Volker Weber schrieb:
> > Bernd,
> >
> > i don't know how facelets component creation, rerendering works, but
> > to my experience the assigning of viewRoot.createUniqueId() ids to
> > componets created by application wil result in dublicateIdException on
> > rerendering.
> >
> >
> > Regards,
> > Volker
> >
> > 2008/1/15, [EMAIL PROTECTED] <[EMAIL PROTECTED]>:
> >> Author: bommel
> >> Date: Tue Jan 15 14:21:33 2008
> >> New Revision: 612250
> >>
> >> URL: http://svn.apache.org/viewvc?rev=612250&view=rev
> >> Log:
> >> (TOBAGO-596) Duplicate component Id exception with tc:date and tx:date
> >> with facelets
> >>
> >> Modified:
> >>
> >> myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIDatePicker.java
> >>
> >> myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
> >>
> >> Modified:
> >> myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIDatePicker.java
> >> URL:
> >> http://svn.apache.org/viewvc/myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIDatePicker.java?rev=612250&r1=612249&r2=612250&view=diff
> >> ==============================================================================
> >> ---
> >> myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIDatePicker.java
> >> (original)
> >> +++
> >> myfaces/tobago/trunk/core/src/main/java/org/apache/myfaces/tobago/component/UIDatePicker.java
> >> Tue Jan 15 14:21:33 2008
> >> @@ -135,13 +135,15 @@
> >> UIHiddenInput hidden =
> >> (UIHiddenInput) ComponentUtil.createComponent(facesContext,
> >> UIHiddenInput.COMPONENT_TYPE, RENDERER_TYPE_HIDDEN);
> >> + hidden.setId(facesContext.getViewRoot().createUniqueId());
> >> link.getChildren().add(hidden);
> >>
> >> // create popup
> >> final UIPopup popup =
> >> (UIPopup) ComponentUtil.createComponent(facesContext,
> >> UIPopup.COMPONENT_TYPE,
> >> RENDERER_TYPE_POPUP);
> >> - //popup.setId(link.getId() + "popup");
> >> +
> >> + popup.setId(facesContext.getViewRoot().createUniqueId());
> >> link.getFacets().put(FACET_PICKER_POPUP, popup);
> >>
> >> popup.setRendered(false);
> >> @@ -234,6 +236,7 @@
> >> UIGraphic image = (UIGraphic) ComponentUtil.createComponent(
> >> facesContext, UIGraphic.COMPONENT_TYPE, RENDERER_TYPE_IMAGE);
> >> image.setRendered(true);
> >> + image.setId(facesContext.getViewRoot().createUniqueId());
> >> image.setValue("image/date.gif");
> >> image.getAttributes().put(ATTR_ALT, ""); //TODO: i18n
> >>
> >> StyleClasses.ensureStyleClasses(image).addFullQualifiedClass("tobago-input-picker");
> >> // XXX not a standard name
> >>
> >> Modified:
> >> myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
> >> URL:
> >> http://svn.apache.org/viewvc/myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java?rev=612250&r1=612249&r2=612250&view=diff
> >> ==============================================================================
> >> ---
> >> myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
> >> (original)
> >> +++
> >> myfaces/tobago/trunk/theme/scarborough/src/main/java/org/apache/myfaces/tobago/renderkit/html/scarborough/standard/tag/DatePickerRenderer.java
> >> Tue Jan 15 14:21:33 2008
> >> @@ -70,20 +70,18 @@
> >> link.setDisabled(dateInput.isReadonly() ||
> >> dateInput.isDisabled());
> >> }
> >> }
> >> - String idPrefix = dateInput.getId() + "_picker";
> >> Map<String, Object> attributes = link.getAttributes();
> >> link.setActionListener(datePickerController);
> >> attributes.put(ATTR_LAYOUT_WIDTH, getConfiguredValue(facesContext,
> >> component, "pickerWidth"));
> >> UIComponent hidden = (UIComponent) link.getChildren().get(0);
> >> - hidden.setId(idPrefix + "Dimension");
> >> + UIPopup popup = (UIPopup) link.getFacets().get(FACET_PICKER_POPUP);
> >> +
> >> attributes.put(ATTR_ACTION_ONCLICK, "Tobago.openPickerPopup(event, '"
> >> + link.getClientId(facesContext) + "', '"
> >> - + hidden.getClientId(facesContext) + "')");
> >> -
> >> - UIPopup popup = (UIPopup) link.getFacets().get(FACET_PICKER_POPUP);
> >> + + hidden.getClientId(facesContext) + "', '"
> >> + + popup.getClientId(facesContext) +"')");
> >>
> >> attributes = popup.getAttributes();
> >> - popup.setId(idPrefix + "popup");
> >>
> >> attributes.put(ATTR_WIDTH, String.valueOf(
> >> ThemeConfig.getValue(facesContext, link,
> >> "CalendarPopupWidth")));
> >> @@ -113,8 +111,6 @@
> >>
> >> applyConverterPattern(popup, converterPattern);
> >>
> >> - UIComponent image = (UIComponent) link.getChildren().get(1);
> >> - image.setId(idPrefix + "image");
> >> if (popup != null) {
> >> UIPage page = ComponentUtil.findPage(facesContext, link);
> >> page.getPopups().add(popup);
> >>
> >>
> >>
> >
> >
>
--
inexso - information exchange solutions GmbH
Bismarckstraße 13 | 26122 Oldenburg
Tel.: +49 441 4082 356 |
FAX: +49 441 4082 355 | www.inexso.de