Hello Francisco,
Why did you drop panelTabbed for that need? It's what it does, show a part
of the page (showDetailItem content) based on user selection.
On 7/5/07, Francisco Passos <[EMAIL PROTECTED]> wrote:
>
> Yes, I should have explained it sooner.
>
> What I intend is to have a couple of tabs (dynamically rendered) that
> will allow the presentation of something below (with PPR) which depends on
> which tab is selected.
>
> Since I'm not yet proficient with these technologies I'm going to
> evaluate alternatives to the implementation of MenuModel.
>
> Thank you for all your help!
>
> Francisco Passos
>
> On 7/5/07, Simon Lessard <[EMAIL PROTECTED]> wrote:
> >
> > Hello Francisco,
> >
> > From what I understand of your menu system, you want to stay in the
> > same page. If that's the case, then ViewIdPropertyModel is not appropriate
> > as it was explicitely made for one tab -> one page/viewId. For your need you
> > might have to create your own implementation of MenuModel.
> >
> > On 7/5/07, Francisco Passos < [EMAIL PROTECTED]> wrote:
> > >
> > > Simon,
> > >
> > > thank you once more.
> > >
> > > I've tried the solution you provided, without the unnecessary
> > > component . Apparently everything runs fine on the background (things get
> > > invoked, properties get updated), but still neither the clicked tab
becomes
> > > selected nor does the outputText get updated.
> > >
> > > On the first render of the page I get this warning twice:
> > >
> > > WARNING: The viewId property in ViewIdPropertyMenuModel is null. The
> > > viewId property is needed to find the focus rowKey.
> > > 5/Jul/2007 10:29:30
> > > org.apache.myfaces.trinidad.model.ViewIdPropertyMenuModel _addToMap
> > >
> > > Then, when I click a tab, I get it twice more and then refreshIt is
> > > called (I'm printing something to the logs).
> > >
> > > Might something still be missing? Maybe some way to tell the
> > > component to generate an event which alerts its registered
> > > partialTriggers... Although having it be partially re-rendered ought to do
> > > it.
> > >
> > > Francisco
> > >
> > > On 7/4/07, Simon Lessard < [EMAIL PROTECTED]> wrote:
> > > >
> > > > Hello Francisco,
> > > >
> > > > This is not how you must deal with binding. You can still let JSF
> > > > initialise the component. You'll need something like the following:
> > > >
> > > > public class MyBeanClass
> > > > {
> > > > private UIComponent myNavigationPane;
> > > >
> > > > public UIComponent getMyNavigationPane()
> > > > {
> > > > return myNavigationPane;
> > > > }
> > > >
> > > > public void setMyNavigationPane(UIComponent myNavigationPane)
> > > > {
> > > > this.myNavigationPane = myNavigationPane;
> > > > }
> > > >
> > > > public void refreshIt(ActionEvent ev)
> > > > {
> > > >
RequestContext.getCurrentInstance().addPartialTarget(myNavigationPane);
> > > > }
> > > > }
> > > >
> > > > In the page do the following:
> > > >
> > > > <tr:navigationPane id="tabber" hint="tabs" value="#{
> > > > fichaBean.gruposAtributos}" var="grupoAtributos" binding="#{
> > > > myBean.myNavigationPane}">
> > > > <f:facet name="nodeStamp">
> > > > <tr:commandNavigationItem action="#{fichaBean.selectGroup}"
> > > > id="tab" text="#{grupoAtributos.ndenomin}" partialSubmit="true"
> > > > selected="#{grupoAtributos.igrupoid eq fichaBean.selectedGroupId}"
> > > > actionListener="#{myBean.refreshIt }">
> > > > <tr:setActionListener from="#{grupoAtributos.igrupoid}"
> > > > to="#{ fichaBean.selectedGroupId }" />
> > > > </tr:commandNavigationItem>
> > > > </f:facet>
> > > > </tr:navigationPane>
> > > >
> > > > <tr:outputText value="#{fichaBean.selectedGroupId}"
> > > > partialTriggers="tabber" />
> > > >
> > > >
> > > > ~ Simon
> > > >
> > > > On 7/4/07, Francisco Passos <[EMAIL PROTECTED]> wrote:
> > > > >
> > > > > I'm on it. Having to create the binding is not dramatic :) I'm
> > > > > having this exception though:
> > > > >
> > > > > java.lang.NullPointerException
> > > > > at
> > > > > org.apache.myfaces.trinidad.component.UIXComponentBase.getClientId(
> > > > > UIXComponentBase.java :261)
> > > > > at
> > > > >
org.apache.myfaces.trinidadinternal.context.RequestContextImpl.addPartialTarget
> > > > > (RequestContextImpl.java:488)
> > > > > at pt.dgaiec.stp.beans.FichaBean.<init>(FichaBean.java
> > > > > :43)
> > > > > at
> > > > > sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native
> > > > > Method)
> > > > > at sun.reflect.NativeConstructorAccessorImpl.newInstance
> > > > > (NativeConstructorAccessorImpl.java:39)
> > > > > Truncated. see log file for complete stacktrace
> > > > >
> > > > >
> > > > > This is how I declared the reference:
> > > > > private transient CoreNavigationPane navigationPane = new
> > > > > CoreNavigationPane();
> > > > >
> > > > >
> > > > > this is the xhtml now:
> > > > >
> > > > > <tr:navigationPane binding="#{fichaBean.navigationPane}"
> > > > > id="tabber" hint="tabs" value="#{fichaBean.gruposAtributos}"
> > > > > var="grupoAtributos" >
> > > > > <f:facet name="nodeStamp">
> > > > > <tr:commandNavigationItem action="#{
> > > > > fichaBean.selectGroup}" id="tab" text="#{grupoAtributos.ndenomin}"
> > > > > partialSubmit="true" selected="#{grupoAtributos.igrupoid eq
> > > > > fichaBean.selectedGroupId}" partialTriggers=":">
> > > > > <tr:setActionListener from="#{
> > > > > grupoAtributos.igrupoid}" to="#{fichaBean.selectedGroupId}" />
> > > > > </tr:commandNavigationItem>
> > > > > </f:facet>
> > > > > </tr:navigationPane>
> > > > >
> > > > > <tr:outputText id="texty" value="#{fichaBean.selectedGroupId}"
> > > > > partialTriggers="tabber" />
> > > > >
> > > > >
> > > > > and this is the action called when a tab is clicked:
> > > > >
> > > > > public void selectGroup() {
> > > > > RequestContext.getCurrentInstance
> > > > > ().addPartialTarget(navigationPane);
> > > > > }
> > > > >
> > > > > I should mention that on the first render (before getting the
> > > > > exception), I get this warning on the logs:
> > > > >
> > > > > 4/Jul/2007 19:27:40
> > > > > org.apache.myfaces.trinidad.model.ViewIdPropertyMenuModel_addToMap
> > > > > WARNING: The viewId property in ViewIdPropertyMenuModel is null.
> > > > > The viewId property is needed to find the focus rowKey.
> > > > >
> > > > > I understand there's an id missing. I just can't figure out
> > > > > where and probably am going to start spreading ids all over the tags
that
> > > > > don't have one to see if anything changes.
> > > > >
> > > > > It is probably a good time to thank you and the members here on
> > > > > the list that have helped me out over the past weeks. So, thank you. I
> > > > > figure either I'll get good at this or I'll get banned from the list
:)
> > > > >
> > > > > Francisco
> > > > >
> > > > > On 7/4/07, Simon Lessard < [EMAIL PROTECTED]> wrote:
> > > > > >
> > > > > > Hello again,
> > > > > >
> > > > > > you can add a component to the list of component to refresh
> > > > > > during a PPR request by using the following code snippet:
> > > > > >
> > > > > >
RequestContext.getCurrentInstance().addPartialTarget(componentToRefresh);
> > > > > >
> > > > > > Sadly you'll have to use binding attribute on our
> > > > > > navigationPane to get a ref to the UIComponent.
> > > > > >
> > > > > > Regards,
> > > > > >
> > > > > > ~ Simon
> > > > > >
> > > > > > On 7/4/07, Francisco Passos <[EMAIL PROTECTED]>
> > > > > > wrote:
> > > > > > >
> > > > > > > programatically add the navigationPane as a partialTarget
> > > > > > > > using RequestContext
> > > > > > >
> > > > > > >
> > > > > > > Sorry for asking, but how can I do this? Is there
> > > > > > > documentation on this?
> > > > > > >
> > > > > > > Thank you for your support.
> > > > > > >
> > > > > > > Francisco
> > > > > > >
> > > > > > >
> > > > > > > On 7/4/07, Simon Lessard <[EMAIL PROTECTED]> wrote:
> > > > > > > >
> > > > > > > > Hello Francisco,
> > > > > > > >
> > > > > > > > your problem is with partialTriggers, you must not use
> > > > > > > > "tab" the id of the navigation item won't be simply that. since
> > > > > > > > navigationPane is an UIXIterator, it's also a NamingContainer,
thus it will
> > > > > > > > generated different client ids including the rowKey. You might
have to
> > > > > > > > programatically add the navigationPane as a partialTarget using
> > > > > > > > RequestContext. You can then set the partialTriggers value of
your
> > > > > > > > outputText to the navigationPane's id. I think it will work.
> > > > > > > >
> > > > > > > >
> > > > > > > > Regards,
> > > > > > > >
> > > > > > > > ~ Simon
> > > > > > > >
> > > > > > > > On 7/4/07, Francisco Passos < [EMAIL PROTECTED]>
> > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > I meant panelTabbed, sorry.
> > > > > > > > >
> > > > > > > > > On 7/4/07, Francisco Passos <[EMAIL PROTECTED] >
> > > > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > Just tried setting partialTriggers="tab" on the
> > > > > > > > > > panelPage. Same thing still.
> > > > > > > > > >
> > > > > > > > > > On 7/4/07, Simon Lessard < [EMAIL PROTECTED]>
> > > > > > > > > > wrote:
> > > > > > > > > > >
> > > > > > > > > > > Hello Francisco,
> > > > > > > > > > >
> > > > > > > > > > > Hmmm, strange... Did you try to set a
> > > > > > > > > > > partialTriggers on the navigationPane?
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > Regards,
> > > > > > > > > > >
> > > > > > > > > > > ~ Simon
> > > > > > > > > > >
> > > > > > > > > > > On 7/4/07, Francisco Passos <
> > > > > > > > > > > [EMAIL PROTECTED]> wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > Renzo, yours is a cool solution, but it depends on
> > > > > > > > > > > > the way the subcomponents are stamped, which is an
information I believe we
> > > > > > > > > > > > theoretically shouldn't depend on, unless we had some
kind of control over
> > > > > > > > > > > > the way the stamping goes.
> > > > > > > > > > > >
> > > > > > > > > > > > Simon, I'm trying your solution and here's what
> > > > > > > > > > > > I've come to:
> > > > > > > > > > > >
> > > > > > > > > > > > <tr:navigationPane id="tabber" hint="tabs"
> > > > > > > > > > > > value="#{fichaBean.gruposAtributos}"
> > > > > > > > > > > > var="grupoAtributos">
> > > > > > > > > > > > <f:facet name="nodeStamp">
> > > > > > > > > > > > <tr:commandNavigationItem action="#{
> > > > > > > > > > > > fichaBean.selectGroup}" id="tab" text="#{
> > > > > > > > > > > > grupoAtributos.ndenomin}" partialSubmit="true"
> > > > > > > > > > > > selected="#{ grupoAtributos.igrupoid eq
> > > > > > > > > > > > fichaBean.selectedGroupId}">
> > > > > > > > > > > > <tr:setActionListener from="#{
> > > > > > > > > > > > grupoAtributos.igrupoid}" to="#{
> > > > > > > > > > > > fichaBean.selectedGroupId}" />
> > > > > > > > > > > > </tr:commandNavigationItem>
> > > > > > > > > > > > </f:facet>
> > > > > > > > > > > > </tr:navigationPane>
> > > > > > > > > > > >
> > > > > > > > > > > > <tr:outputText value="#{
> > > > > > > > > > > > fichaBean.selectedGroupId}" partialTriggers="tab"
> > > > > > > > > > > > />
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > I've checked that the selectedGroupId property is
> > > > > > > > > > > > being updated when I click on the tab, which is the
good news :)
> > > > > > > > > > > >
> > > > > > > > > > > > The bad news is that the tab isn't changing its
> > > > > > > > > > > > aspect to show it is selected. And the outputText below
does not update
> > > > > > > > > > > > either. I've tried setting partialTriggers to "tab" as well as
"tabber".
> > > > > > > > > > > > What am I still missing?
> > > > > > > > > > > >
> > > > > > > > > > > > On 7/4/07, Renzo Tomaselli <
> > > > > > > > > > > > [EMAIL PROTECTED]> wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > I simply parse the component id. Being an
> > > > > > > > > > > > > iterating component - Tridindad adds a progressive
index while stamping out
> > > > > > > > > > > > > subcomponents:
> > > > > > > > > > > > >
> > > > > > > > > > > > > public void navigation(ActionEvent event) {
> > > > > > > > > > > > > FacesContext fc =
> > > > > > > > > > > > > FacesContext.getCurrentInstance();
> > > > > > > > > > > > > UIComponent actionItem =
> > > > > > > > > > > > > event.getComponent();
> > > > > > > > > > > > > String id = actionItem.getClientId(fc);
> > > > > > > > > > > > > int i = id.lastIndexOf(
> > > > > > > > > > > > > NamingContainer.SEPARATOR_CHAR);
> > > > > > > > > > > > > if (i >= 0) {
> > > > > > > > > > > > > id = id.substring(0, i);
> > > > > > > > > > > > > i = id.lastIndexOf(
> > > > > > > > > > > > > NamingContainer.SEPARATOR_CHAR);
> > > > > > > > > > > > > id = id.substring(i + 1);
> > > > > > > > > > > > > int newSelected = Integer.parseInt
> > > > > > > > > > > > > (id);
> > > > > > > > > > > > > .....
> > > > > > > > > > > > >
> > > > > > > > > > > > > This should work well for all Trinidad iterating
> > > > > > > > > > > > > components, provided that stamping includesTrinidad
components only.
> > > > > > > > > > > > > Otherwise, the index can be easily forgotten by
Trinidad (then duplicated id
> > > > > > > > > > > > > warnings), don't ask me why.
> > > > > > > > > > > > >
> > > > > > > > > > > > > -- Renzo
> > > > > > > > > > > > >
> > > > > > > > > > > > > Francisco Passos wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > Thank you, your example is great.
> > > > > > > > > > > > >
> > > > > > > > > > > > > However, how do you know what tab has been
> > > > > > > > > > > > > clicked, so you can act accordingly on the
actionListener?
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > On 7/2/07, * Renzo Tomaselli* <
> > > > > > > > > > > > > [EMAIL PROTECTED]> wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > Francisco,
> > > > > > > > > > > > > component tr:navigationPane is an iterating
> > > > > > > > > > > > > component by itself - no need for an explicit loop. I
do it like this (using
> > > > > > > > > > > > > Facelets):
> > > > > > > > > > > > >
> > > > > > > > > > > > > <ui:component>
> > > > > > > > > > > > > <c:if test="#{bean.visible}">
> > > > > > > > > > > > > <t:saveState id="selected" value="#{
> > > > > > > > > > > > > bean.selected}"/>
> > > > > > > > > > > > > <t:saveState id="tabs" value="#{
> > > > > > > > > > > > > bean.tabs}"/>
> > > > > > > > > > > > > <tr:navigationPane id="tabber"
> > > > > > > > > > > > > hint="tabs" value="#{bean.tabModel}" var="tab"
> > > > > > > > > > > > > styleClass="navigator">
> > > > > > > > > > > > > <f:facet name="nodeStamp">
> > > > > > > > > > > > > <tr:commandNavigationItem
> > > > > > > > > > > > > text="#{tab.label}" actionListener="#{
> > > > > > > > > > > > > bean.navigation}"
> > > > > > > > > > > > > id="tab"
> > > > > > > > > > > > > selected="#{cx:isSelected(bean, tab)}" icon="#{
> > > > > > > > > > > > > tab.icon}"/>
> > > > > > > > > > > > > </f:facet>
> > > > > > > > > > > > > </tr:navigationPane>
> > > > > > > > > > > > > <cx:include src="#{bean.component}"
> > > > > > > > > > > > > bean="#{bean.componentBean}"
> > > > > > > > > > > > > container="#{container}tabby:"/>
> > > > > > > > > > > > > </c:if>
> > > > > > > > > > > > > </ui:component>
> > > > > > > > > > > > >
> > > > > > > > > > > > > Here everythings - from the tab list to the
> > > > > > > > > > > > > child component to appear below the tabs - is
dynamically taken from a bean.
> > > > > > > > > > > > > Tab list and current selection are made
> > > > > > > > > > > > > persistent across requests by means of saveState (my
beans are only
> > > > > > > > > > > > > request-scoped).
> > > > > > > > > > > > > Hope it helps.
> > > > > > > > > > > > >
> > > > > > > > > > > > > -- Renzo
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > Francisco Passos wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > By the way, I'm trying to populate dinamically
> > > > > > > > > > > > > either a panelTabbed or a navigationPane.
> > > > > > > > > > > > >
> > > > > > > > > > > > > When using ui:repeat, panelTabbed renders
> > > > > > > > > > > > > incorrectly (no content appears) and this is shown on
the logs:
> > > > > > > > > > > > > WARNING: Only tr:showDetailItem is allowed as
> > > > > > > > > > > > > child of tr:panelTabbed.
> > > > > > > > > > > > >
> > > > > > > > > > > > > When using ui:repeat and navigationPane, an
> > > > > > > > > > > > > exception is thrown:
> > > > > > > > > > > > > SEVERE: Warning: illegal component hierarchy
> > > > > > > > > > > > > detected, expected UIXCommand but found another type
of component instead.
> > > > > > > > > > > > > java.lang.ClassCastException :
> > > > > > > > > > > > > com.sun.facelets.component.UIRepeat
> > > > > > > > > > > > >
> > > > > > > > > > > > > I'm going to try my luck with JSTL now,
> > > > > > > > > > > > > nevertheless if you know of a solution, do tell :)
> > > > > > > > > > > > >
> > > > > > > > > > > > > --Francisco
> > > > > > > > > > > > >
> > > > > > > > > > > > > On 7/2/07, * Francisco Passos* <
> > > > > > > > > > > > > [EMAIL PROTECTED]> wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > Simon and Matthias,
> > > > > > > > > > > > >
> > > > > > > > > > > > > thank you for clearing my doubt. By the way, if
> > > > > > > > > > > > > I may leave the suggestion, it would be cool if
panelTabbed had alternative
> > > > > > > > > > > > > ways for presentation, much like navigationPage.
> > > > > > > > > > > > >
> > > > > > > > > > > > > As far as the wiki, I've added the missing entry
> > > > > > > > > > > > > to the page for completeness, although obviously it
may still be incomplete.
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > --Francisco
> > > > > > > > > > > > >
> > > > > > > > > > > > > On 7/2/07, *Matthias Wessendorf* <[EMAIL PROTECTED]>
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > Francisco,
> > > > > > > > > > > > >
> > > > > > > > > > > > > we started a wiki, containing infos like this,
> > > > > > > > > > > > > in the past,
> > > > > > > > > > > > > but never updated it.
> > > > > > > > > > > > >
> > > > > > > > > > > > > feel free to join ;-)
> > > > > > > > > > > > >
> > > > > > > > > > > > > -M
> > > > > > > > > > > > >
> > > > > > > > > > > > > On 7/2/07, Simon Lessard <[EMAIL PROTECTED]>
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > Hello Francisco,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > No, menuTabs was replaced by navigationPane
> > > > > > > > > > > > > with hint attribute set to tabs.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Regards,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > ~ Simon
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > On 7/2/07, Francisco Passos <
> > > > > > > > > > > > > [EMAIL PROTECTED]> wrote:
> > > > > > > > > > > > > > > Thank you.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > The correspondence I couldn't find in the
> > > > > > > > > > > > > wiki was for the component
> > > > > > > > > > > > > > af:menuTabs, but probably panelTabbed also
> > > > > > > > > > > > > replaces it.
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On 6/29/07, Adam Winer < [EMAIL PROTECTED]>
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > > Actually, the Wiki page shows the
> > > > > > > > > > > > > renaming:
> > > > > > > > > > > > > > > > panelTabbed was formerly called
> > > > > > > > > > > > > showOneTabs.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > There's an example in trinidad-demo.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > -- Adam
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > On 6/29/07, Francisco Passos <
> > > > > > > > > > > > > [EMAIL PROTECTED] > wrote:
> > > > > > > > > > > > > > > > > Hello there.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > I'm evaluating the usage of a
> > > > > > > > > > > > > panelTabbed. Are there any working
> > > > > > > > > > > > > > examples of
> > > > > > > > > > > > > > > > > this component?
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > The only example I have is from an ADF
> > > > > > > > > > > > > Faces app, which uses
> > > > > > > > > > > > > > af:menuTabs,
> > > > > > > > > > > > > > > > > but
> > > > > > > > > > > > > http://wiki.apache.org/myfaces/Trinidad_renaming
> > > > > > > > > > > > > > does
> > > > > > > > > > > > > > > > > not mention any changes to this
> > > > > > > > > > > > > component.
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > > Francisco
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > --
> > > > > > > > > > > > > Matthias Wessendorf
> > > > > > > > > > > > >
> > > > > > > > > > > > > further stuff:
> > > > > > > > > > > > > blog: http://matthiaswessendorf.wordpress.com/
> > > > > > > > > > > > > mail: matzew-at-apache-dot-org
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>