myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "H. Swaczinna" <swaczi...@wlp-systems.de>
Subject AW: Re: AW: Re: [Tobago] How to use TabChangeListener?
Date Mon, 08 Jan 2007 22:52:06 GMT
Hello Bernd,

yes, I've checked the tobago-example-demo more than once. I can
provide a simple example to you:

test.jsp:

<%@ taglib uri="http://myfaces.apache.org/tobago/component" prefix="tc" 
%><%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" 
%><%@ page contentType="text/html;charset=UTF-8" language="java" 
%><%@ page pageEncoding="UTF-8"
%><f:view
 ><tc:page label="Test" width="200px" height="100px">
    <tc:tabGroup switchType="reloadTab"    
      state="#{mainController.selectedTab}">
      <tc:tabChangeListener 
        type="de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener"
        binding="#{mainController.tabChangeListener}"/>
      <tc:tab label="Tab1"> 
        <tc:out value="Tab1"/>
      </tc:tab>   
      <tc:tab label="Tab2"> 
        <tc:out value="Tab2"/>
      </tc:tab> 
      <tc:tab label="Tab3"> 
        <tc:out value="Tab3"/>
      </tc:tab>   
    </tc:tabGroup>
  </tc:page>
</f:view>

MainController.java:

  private TabChangeListener tabChangeListener;

  public TabChangeListener getTabChangeListener() {
    getLog().debug("getTabChangeListener: " + tabChangeListener);
    return tabChangeListener;
  }

  public void setTabChangeListener(TabChangeListener tabChangeListener) {
    getLog().debug("setTabChangeListener: " + tabChangeListener);
    this.tabChangeListener = tabChangeListener;
  }

SimpleTabChangeListener.java:

public class SimpleTabChangeListener implements TabChangeListener {

  private static final Log LOG = LogFactory.getLog(SimpleTabChangeListener.class);

  public SimpleTabChangeListener() {
    LOG.debug("SimpleTabChangeListener: " + this);
  }
  
  public void processTabChange(TabChangeEvent tabChangeEvent) {
    LOG.debug("processTabChange: " + this + ", " + tabChangeEvent.getOldState() + 
        " -> " + tabChangeEvent.getNewState());
  }
}

The log:

2007-01-08 23:15:17 http-8080-Processor23 DEBUG - de.wlps.ndr.workflow.gena.webapp.web.MainController:376
- getTabChangeListener: null
2007-01-08 23:15:17 http-8080-Processor23 DEBUG - de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener:13
- SimpleTabChangeListener: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@94d08f
2007-01-08 23:15:17 http-8080-Processor23 DEBUG - de.wlps.ndr.workflow.gena.webapp.web.MainController:381
- setTabChangeListener: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@94d08f
2007-01-08 23:15:17 http-8080-Processor23 DEBUG - de.wlps.ndr.workflow.gena.webapp.web.MainController:337
- getSelectedTab: 0
2007-01-08 23:15:19 http-8080-Processor24 DEBUG - de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener:13
- SimpleTabChangeListener: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@13681bc
2007-01-08 23:15:19 http-8080-Processor24 DEBUG - de.wlps.ndr.workflow.gena.webapp.web.MainController:342
- setSelectedTab: 0
2007-01-08 23:15:19 http-8080-Processor24 DEBUG - de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener:17
- processTabChange: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@13681bc,
0 -> 1
2007-01-08 23:23:59 http-8080-Processor25 DEBUG - de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener:13
- SimpleTabChangeListener: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@1969532
2007-01-08 23:23:59 http-8080-Processor25 DEBUG - de.wlps.ndr.workflow.gena.webapp.web.MainController:342
- setSelectedTab: 1
2007-01-08 23:23:59 http-8080-Processor25 DEBUG - de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener:17
- processTabChange: de.wlps.ndr.workflow.common.webapp.web.SimpleTabChangeListener@1969532,
1 -> 2

You can see, there's allways a new instance of SimpleTabChangeListener
created and the processTabChange() method is invoked on this new
instance. You can see also, there's no call to setTabChangeListener()
in MainController, except the first one. And no call to
getTabChangeListener() after setTabChangeListener().

Regards
Helmut


>Hello Helmut,
>
>can you check the tobago-example-demo and the tabChangeListener example.
>
>The tabChangeListener is only created if the binding doesn't point to a 
>valid reference to a TabChangeListener instance.
>
>Are you using facelets or jsp?
>
>Regards
>
>Bernd
>
>H. Swaczinna wrote:
>> Hello Bernd!
>> 
>>> is the GenaTabChangeListener instance of TabChangeListener?
>> 
>> Yes, of course.
>> 
>> public class GenaTabChangeListener implements TabChangeListener {
>> 
>>> With the binding attribute you can point directly to a managed bean.
>> 
>> Do you mean this binding attributte?
>> 
>>        binding="#{mainController.tabChangeListener}"/>
>> 
>> But setTabChangeListener() in my managed bean (mainController) is not 
>> called, when a new TabChangeListener instance is created. Only the first 
>> time.
>> 
>> Regards
>> Helmut
>> 
>>> H. Swaczinna wrote:
>>>> Hello,
>>>>
>>>> I've set in my tabGroup a TabChangeListener
>>>>
>>>>   <tc:tabGroup switchType="reloadPage"  
>>>>     binding="#{mainController.tabGroup}"
>>>>     state="#{mainController.selectedTab}">
>>>>     <tc:tabChangeListener 
>>> type="de.wlps.ndr.workflow.common.webapp.web.GenaTabChangeListener"
>>>>       binding="#{mainController.tabChangeListener}"/>
>>>>
>>>> But every time the processTabChange() method is called, a new instance
>>>> of GenaTabChangeListener is created. And this instance is not set
>>>> via the binding in my backing bean. Even if I create the TabChangeListener

>
>>>> in the getTabChangeListener() method, there's always a new one created. 
>>>> So the backing bean doesn't know the TabChangeListener and vice versa. 
>>>> How do I access the backing bean from a TabChangeListener? For example to

>
>>>> store data entred in a tab when the user switches to another tab. Is it 
>>>> possible to declare the TabChangeListener as a managed bean in 
>>>> faces-config.xml?
>>>>
>>>> Regards
>>>> Helmut
>>>>
>>

Mime
View raw message