Hi,

first, thanks for your suggestions, I really appreciate your help.
Sorry that it took so long trying out most of the stuff:

> Did you ensure that you
> 1) set all the Ids of your programmatically created components

I did not, but now I am setting all IDs - eventhough it did not help.

> 2) have a setPanelGrid (used for the binding after page reload i think,
> i have never used the binding attribute however, my experience is
> limited to composite components)

Yeah, got that before

> 3) set all required properties for corresponding tags (that is if tag
> for component X requires property y, ensure there is a setValue(Y,...)
> in your code)

Uh-oh. That's a bit hard - how do I know which property really is required?
I thought that when it's required and missing, I would get a "method not
found" exception...

> 4) it still fails with only 1 binding, and no nested panelGrid.

I've tried whithout the nested panelGrid, did not help either. I wasn't
able to strip it down to one binding only and still perform something
usefull. What did you wanted to test in that case?

CU,
Uli

> Ulrich Teichert a écrit :
> > Hi,
> >
> >   
> >> This is i think your mistake:
> >>
> >>     _tabbedPane = new HtmlPanelTabbedPane();
> >>     _tab = new HtmlPanelTab();
> >>
> >> Never construct an UIComponent directly. It's lifecycle has to be
> >> managed by the JSF engine for things to work properly. If you need to
> >> create compoment using java code, use the application, like this:
> >>
> >> Application application =
> >> FacesContext.getCurrentInstance().getApplication();
> >> _tabbedPane =
> >>
> (HtmlPanelTabbedPane)application.createComponent(HtmlPanelTabbedPane.COMPONENT_TYPE);
> >>     
> >
> > OK, makes sense, esp. because I already did that in other places.
> > So, I changed the code to:
> >
> > public HtmlPanelTabbedPane getTabbedPane() {
> >   if (_tabbedPane == null) {
> >     Application app =
> FacesContext.getCurrentInstance().getApplication();
> >     _tabbedPane =
> (HtmlPanelTabbedPane)app.createComponent(HtmlPanelTabbedPane.COMPONENT_TYPE);
> >     _tab =
> (HtmlPanelTab)app.createComponent(HtmlPanelTab.COMPONENT_TYPE);
> >     _tab.setLabel("Blah");
> >     _tab.setId("PanelTab");
> >     _tabbedPane.getChildren().add(_tab);
> >     _tree = (HtmlTree)app.createComponent(HtmlTree.COMPONENT_TYPE);
> > ....
> >
> > But the behaviour did not change :-( Anything else suspicious?
> >
> > TIA,
> > Uli
> >
> >   
> >> Ulrich Teichert a écrit :
> >>     
> >>> Hi,
> >>>
> >>>   
> >>>       
> >>>> Could you provide us with a sampel code of how you create your
> >>>> UIComponent?
> >>>>     
> >>>>         
> >>> Sure, I should have done that from the start. I also forgot to list
> >>> some vital version numbers - which proves that I couldn't really
> >>> think anymore yesterday evening...
> >>>
> >>> Anyway, I am using java 1.5 in a Linux environment, tomcat 5.0.28,
> >>> myfaces 1.1.5-SNAPSHOT, tomahawk-1.1.5-SNAPSHOT, spring 2.0RC1 and
> >>> tons of other stuff which is probably not that important.
> >>>
> >>> I'm creating my HtmlPanelTabbedPane on the fly in the get-method of
> >>> my bean, like this:
> >>>
> >>> public HtmlPanelTabbedPane getTabbedPane() {
> >>>   if (_tabbedPane == null) {
> >>>     _tabbedPane = new HtmlPanelTabbedPane();
> >>>     _tab = new HtmlPanelTab();
> >>>     _tab.setLabel("Blah");
> >>>     _tab.setId("PanelTab");
> >>>     _tabbedPane.getChildren().add(_tab);
> >>>     Application app =
> >>>       
> >> FacesContext.getCurrentInstance().getApplication();
> >>     
> >>>     _tree = (HtmlTree)app.createComponent(HtmlTree.COMPONENT_TYPE);
> >>>     _tree.setClientSideToggle(false);
> >>>     _tree.setShowRootNode(true);
> >>>     _tree.setValueBinding("value",
> >>>       
> >> app.createValueBinding("#{myBean.treeModel}"));
> >>     
> >>>     _tree.setVar("node");
> >>>     ValueBinding binding =
> >>>       
> >> app.createValueBinding("#{node.description}");
> >>     
> >>>     HtmlOutputText text = new HtmlOutputText();
> >>>     text.setValueBinding("value", binding);
> >>>     _tree.getFacets().put("node", text);
> >>>     _tab.getChildren().add(_tree);
> >>>   }
> >>>   return _tabbedPane;
> >>> }
> >>>
> >>> As you can see, it's a stripped down example of what I want to do
> >>> in the end, currently I'm just creating one tab, but you get the
> >>> picture. There's a corresponding set-method, too.
> >>>
> >>> My template contains:
> >>>
> >>> <form jsfc="h:form" id="myMainForm">
> >>>   <h:panelGrid columns="2">
> >>>     <t:panelTabbedPane bgcolor="#CCFFFF" serverSideTabSwitch="true"
> >>>       
> >> binding="#{myBean.tabbedPane}">
> >>     
> >>>     </t:panelTabbedPane>
> >>>     <h:panelGrid columns="1" binding="#{myBean.panelGrid}">
> >>>     </h:panelGrid>
> >>>   </h:panelGrid>
> >>> </form>
> >>>
> >>> As you can see, I have a panel grid as second element in my outer
> panel
> >>> grid, which is created roughly the same way:
> >>>
> >>> public HtmlPanelGrid getPanelGrid() {
> >>>   if (_panelGrid == null) {
> >>>   Application app =
> FacesContext.getCurrentInstance().getApplication();
> >>>   _panelGrid =
> >>>       
> >> (HtmlPanelGrid)app.createComponent(HtmlPanelGrid.COMPONENT_TYPE);
> >>     
> >>>   _panelGrid.setColumns(1);
> >>>   _panelGrid.setValueBinding("value",
> >>>       
> >> app.createValueBinding("#{myBean.panelGrid}"));
> >>     
> >>> ....
> >>>   }
> >>>   return _panelGrid;
> >>> }
> >>>
> >>> But I don't think it's playing a vital role, I've just listed it here
> >>> so that the template makes sense to you. I have some HtmlInput stuff
> >>> in it, that's why I need the form.
> >>>
> >>> CU,
> >>> Uli
> >>>
> >>>   
> >>>       
> >>>> Ulrich Teichert a écrit :
> >>>>     
> >>>>         
> >>>>> Hi,
> >>>>>
> >>>>> suppose I want to create some UIComponents via Java, which are not
> >>>>>       
> >>>>>           
> >>>> listed
> >>>>     
> >>>>         
> >>>>> in any template (for instance, creating a variable number of tabs
> >>>>>           
> >> inside
> >>     
> >>>>> a HtmlPanelTabbedPane).
> >>>>> These components will be added to an existing tabbed pane (generated
> >>>>> via a template from spring, to be exact).
> >>>>>
> >>>>> After some self-inflicted pain, I got them to show up just fine and
> my
> >>>>> data inside the tabs (org.apache.myfaces.custom.tree2.HtmlTree) is
> >>>>>       
> >>>>>           
> >>>> displayed, but after a save/restore cycle through going onto another
> >>>>         
> >> page
> >>     
> >>>>     
> >>>>         
> >>>>> and coming back, nothing is there. I can see that I'm getting empty
> >>>>>           
> >> tabs
> >>     
> >>>>> set during the process in my bean, but that's it.
> >>>>>
> >>>>> Maybe I'm just trying something stupid? Or do I need to implement
> >>>>>       
> >>>>>           
> >>>> another interface as "Serializable" as well in my bean? I would also
> >>>>         
> >> happy for
> >>     
> >>>>     
> >>>>         
> >>>>> any hint where I should start debugging,
> >>>>>
> >>>>> thanks for any help,
> >>>>> Uli
> >>>>>   
> >>>>>       
> >>>>>           
> >>>   
> >>>       
> >
> >   

-- 
Ulrich Teichert
Stormweg 24
24539 Neumünster, Germany


"Feel free" – 10 GB Mailbox, 100 FreeSMS/Monat ...
Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail

Reply via email to