0

ZK Spring 3 : How to send Event from popup window back to main window

asked 2011-08-29 13:50:00 +0800

Samu gravatar image Samu
39 2

Hi All,

Need you to help.

I have 2 zul page, one is main page and another one is popup page. In popup page, when user click "close popup" button, I want to send event back to main page and close the popup. But it show error "Unknown exception: java.lang.StackOverflowError" when the popup is closed.

>> at org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:50)
>> at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
>> at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
>> at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:33)
>> at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:653)
>> at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:604)
>> at org.zkoss.zul.Window$$EnhancerByCGLIB$$ad437c54.getAttribute(<generated>)
>> at org.zkoss.spring.impl.ZKProxy$1.getSelf(ZKProxy.java:129)
>> at org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:50)
>> at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:325)
>> at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
>> at org.springframework.aop.target.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.java:33)
>> at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.getTarget(Cglib2AopProxy.java:653)
>> at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:604)
>> at org.zkoss.zul.Window$$EnhancerByCGLIB$$ad437c54.getAttribute(<generated>)

I try to test ZK without ZK Spring 3, it work. And I test with ZK Spring 1.2, it work.

I don't know, this is bug of ZK Spring 3 or I should do something for this.

My code
Main page controller

@Controller("scopeTestCtrl")
@Scope("execution")
public class ScopeTestController extends GenericSpringComposer {
	
	@Autowired
	private ScopeTestModel scopeTestModel;
	
	@Autowired
	private Window scopeTestWin;
	@Autowired
	private Button openPopup;
	
	private boolean sameObj = false;
	
	@EventHandler("scopeTestWin.onCreate")
	public void doCreateWindow(Event event){
		System.out.println("scopeTestCtrl");
		if(sameObj){
			System.out.println("old bean");
		}else{
			System.out.println("new bean");
			sameObj = true;
		}
		
		if(scopeTestModel.getModelName() != null){
			System.out.println("old model bean");
		}else{
			System.out.println("new model bean");
			scopeTestModel.setModelName("Main Window");
		}
		
		System.out.println("openPopup-->[" + openPopup.hashCode() + "] label=" + openPopup.getLabel());
	}
	
	@EventHandler("openPopup.onClick")
	public void doClickOpenPopup(Event event) throws SuspendNotAllowedException, InterruptedException{
		System.out.println("scopeTestCtrl openPopup");
		Window popupWin = (Window) Executions.getCurrent().createComponents("/exam23/scope_test_popup.zul",scopeTestWin, null);
		popupWin.doModal();
	}
	
	@EventHandler("scopeTestWin.onReturnParam")
	public void doReturnParam(Event event){
		System.out.println("close popup");
	}

}


popup page controller
@Controller("scopeTestPopupCtrl")
@Scope("execution")
public class ScopeTestPopupController extends GenericSpringComposer {
	@Autowired
	private ScopeTestModel scopeTestModel;
	
	@Autowired
	private Button closePopup;
	
	private boolean sameObj = false;
	
	private Component win;
	
	@EventHandler("closePopup.onClick")
	public void doClickOpenPopup(Event event) throws SuspendNotAllowedException, InterruptedException{
		Events.postEvent(new Event("onReturnParam",win.getParent(),null));
		win.setParent(null);
		win.detach();
	}

	@Override
	public void doAfterCompose(org.zkoss.zk.ui.Component comp) throws Exception {
		super.doAfterCompose(comp);
		win = comp;
	}
}

delete flag offensive retag edit
Be the first one to reply this discussion!
Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

[hide preview]

Question tools

Follow

RSS

Stats

Asked: 2011-08-29 13:50:00 +0800

Seen: 518 times

Last updated: Aug 29 '11

Support Options
  • Email Support
  • Training
  • Consulting
  • Outsourcing
Learn More