0

how to implement self referential foreign key

asked 2010-04-01 01:55:27 +0800

techvts gravatar image techvts
120 2 5

DB table:

+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| category_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| category_desc | varchar(100) | YES | | NULL | |
| isparent | varchar(1) | NO | | N | |
| parentcat_id | int(10) unsigned | NO | MUL | | |
+---------------+------------------+------+-----+---------+----------------+

in above table structure parentcat_id is foreign key which references to category_id from same table.

i had created zeta DB form by using form builder .In order bring category desc value in combo i had done all changes in zul,controller and model. but due to self referential foreign key i get circular references bean error what should be done.

Error stack trace as below

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'prodcat_mainController': Injection of resource fields failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'parentcat_id' must be of type [org.zkoss.zul.Listbox], but was actually of type [org.zkoss.zul.Intbox]
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:293)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.SpringUtil.getBean(SpringUtil.java:54)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindController(ZkSpringBeanBindingComposer.java:116)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindControllers(ZkSpringBeanBindingComposer.java:109)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindComponent(ZkSpringBeanBindingComposer.java:92)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.doAfterCompose(ZkSpringBeanBindingComposer.java:68)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:640)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:587)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:563)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:498)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:378)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:299)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:229)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:165)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause

org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'parentcat_id' must be of type [org.zkoss.zul.Listbox], but was actually of type [org.zkoss.zul.Intbox]
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:322)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:427)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:502)
org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180)
org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:290)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.SpringUtil.getBean(SpringUtil.java:54)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindController(ZkSpringBeanBindingComposer.java:116)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindControllers(ZkSpringBeanBindingComposer.java:109)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindComponent(ZkSpringBeanBindingComposer.java:92)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.doAfterCompose(ZkSpringBeanBindingComposer.java:68)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:640)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:587)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:563)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:498)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:378)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:299)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:229)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:165)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


note The full stack trace of the root cause is available in the Apache Tomcat/6.0.18 logs.


--------------------------------------------------------------------------------

delete flag offensive retag edit

4 Replies

Sort by ยป oldest newest

answered 2010-04-01 04:05:55 +0800

techvts gravatar image techvts
120 2 5

Another error regarding circular reference

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'prodcat_mainController': Injection of resource fields failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'parentcat_id': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'parentcat_id': Requested bean is currently in creation: Is there an unresolvable circular reference?
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:293)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.SpringUtil.getBean(SpringUtil.java:54)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindController(ZkSpringBeanBindingComposer.java:116)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindControllers(ZkSpringBeanBindingComposer.java:109)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindComponent(ZkSpringBeanBindingComposer.java:92)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.doAfterCompose(ZkSpringBeanBindingComposer.java:68)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:640)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:587)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:563)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:498)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:378)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:299)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:229)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:165)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'parentcat_id': Invocation of init method failed; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'parentcat_id': Requested bean is currently in creation: Is there an unresolvable circular reference?
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1336)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:427)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:502)
org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180)
org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:290)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.SpringUtil.getBean(SpringUtil.java:54)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindController(ZkSpringBeanBindingComposer.java:116)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindControllers(ZkSpringBeanBindingComposer.java:109)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindComponent(ZkSpringBeanBindingComposer.java:92)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.doAfterCompose(ZkSpringBeanBindingComposer.java:68)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:640)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:587)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:563)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:498)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:378)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:299)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:229)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:165)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)


root cause

org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'parentcat_id': Requested bean is currently in creation: Is there an unresolvable circular reference?
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:224)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.DelegatingVariableResolver.resolveVariable(DelegatingVariableResolver.java:80)
org.zkoss.zk.ui.impl.PageImpl.resolveVariable(PageImpl.java:463)
org.zkoss.zk.ui.impl.PageImpl.access$300(PageImpl.java:113)
org.zkoss.zk.ui.impl.PageImpl$NS.getVariable(PageImpl.java:1194)
org.zkoss.zk.scripting.util.SimpleNamespace.getVariable(SimpleNamespace.java:93)
org.zkoss.zk.ui.AbstractComponent.getVariable(AbstractComponent.java:797)
org.zkoss.spring.bean.ZkComponentFactoryBean.getObject0(ZkComponentFactoryBean.java:138)
org.zkoss.spring.bean.ZkComponentFactoryBean.getObjectType(ZkComponentFactoryBean.java:174)
org.zkoss.spring.bean.ZkComponentFactoryBean.afterPropertiesSet(ZkComponentFactoryBean.java:184)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1367)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1333)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:471)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:168)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:427)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:502)
org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180)
org.springframework.beans.factory.annotation.InjectionMetadata.injectFields(InjectionMetadata.java:105)
org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessAfterInstantiation(CommonAnnotationBeanPostProcessor.java:290)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:957)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
java.security.AccessController.doPrivileged(Native Method)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
org.zkoss.spring.web.context.request.IdSpaceScope.get(IdSpaceScope.java:70)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:881)
org.zkoss.spring.SpringUtil.getBean(SpringUtil.java:54)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindController(ZkSpringBeanBindingComposer.java:116)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindControllers(ZkSpringBeanBindingComposer.java:109)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.bindComponent(ZkSpringBeanBindingComposer.java:92)
org.zkoss.spring.config.ZkSpringBeanBindingComposer.doAfterCompose(ZkSpringBeanBindingComposer.java:68)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:640)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:587)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:563)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:531)
org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:498)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:378)
org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:299)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:229)
org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:165)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

link publish delete flag offensive edit

answered 2010-04-02 05:53:33 +0800

ashishd gravatar image ashishd flag of Taiwan
1972 6

Hi techvts,
Could you please provide your controller and model class codes as well? Unfortunately Error statcktrace in not much help in this regard.

Thanks
- Ashish

link publish delete flag offensive edit

answered 2010-04-03 01:11:09 +0800

techvts gravatar image techvts
120 2 5
Prodcat_mainController.java
package zkadsmine.prodcat_main;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.spring.context.annotation.AfterCompose;
import org.zkoss.spring.context.annotation.AppliedTo;

@Scope("idspace")
@Controller @AppliedTo("prodcat_mainWin")
public class Prodcat_mainController extends zkadsmine.prodcat_main.base.Prodcat_mainControllerBase {
	@Resource
	protected Prodcat_mainModel prodcat_mainModel;
	
	public Prodcat_mainModel getProdcat_mainModel(){
		return prodcat_mainModel;
	}
	
@AfterCompose
	public void afterCompose() { 
		super.afterCompose();
		

	}
}

<b >Prodcat_main.java</b>
package zkadsmine.prodcat_main.base;



import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;




@Entity
@Table( name = "prodcat_main")
public class Prodcat_main
{
	//Generate Class Body.
	public boolean equals(Object obj) {
		if (this == obj) return true;
		if (obj == null) return false;
		if (!(obj instanceof Prodcat_main)) return false;
		Prodcat_main other = (Prodcat_main) obj;
		if (this.getCategory_id() == null) {
			if (other.getCategory_id() != null)return false;
		} else if (! this.getCategory_id().equals(other.getCategory_id()))return false;
		return true;
	}

	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((this.getCategory_id() == null) ? 0 : this.getCategory_id().hashCode());
		return result;
	}

	@Column(name = "category_id", nullable=false)
	@Id
	@GeneratedValue
	protected Long category_id;
	public void setCategory_id(Long value) {
		this.category_id = value;
	}
	public Long getCategory_id(){
		return this.category_id;
	}


	@Column(name = "category_desc")
	protected String category_desc;
	public void setCategory_desc(String value) {
		this.category_desc = value;
	}
	public String getCategory_desc(){
		return this.category_desc;
	}


	@Column(name = "isparent", nullable=false)
	protected String isparent;
	public void setIsparent(String value) {
		this.isparent = value;
	}
	public String getIsparent(){
		return this.isparent;
	}


	/*@Column(name = "parentcat_id", nullable=false)
	protected Long parentcat_id;
	public void setParentcat_id(Long value) {
		this.parentcat_id = value;
	}
	public Long getParentcat_id(){
		return this.parentcat_id;
	}
*/
	
	@javax.persistence.ManyToOne
	@JoinColumn(name ="parentcat_id", nullable=true)
	Prodcat_main prodcat_main;
	public void setProdcat_main(Prodcat_main value) {
		this.prodcat_main= value;
	}
	public Prodcat_main  getProdcat_main(){
		return this.prodcat_main;
	}
}

package zkadsmine.prodcat_main.base;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import zkadsmine.prodcat_main.base.Prodcat_main;

import org.zkoss.lang.Strings;

import org.zkoss.spring.context.annotation.AfterCompose;
import org.zkoss.spring.context.annotation.EventHandler;
import org.zkoss.spring.jpa.EntityNotFoundException;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.event.ClientInfoEvent;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.KeyEvent;
import org.zkoss.zk.ui.event.SelectEvent;
import org.zkoss.zkplus.databind.AnnotateDataBinder;
import org.zkoss.zkplus.databind.BindingListModel;
import org.zkoss.zkplus.databind.DataBinder;


/* */
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.FieldComparator;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Timebox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Spinner;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import org.zkoss.zul.Decimalbox;

import org.zkoss.zul.event.PageSizeEvent;
import org.zkoss.zul.event.PagingEvent;

public abstract class Prodcat_mainControllerBase {
	

	
	/****** Field Edit Components *******/
	@Resource
	protected Intbox category_id;
	@Resource
	protected Textbox category_desc;
	@Resource
	protected Textbox isparent;
	@Resource
	protected Listbox parentcat_id;


	
	
	/****** Zul Specific Application Control *******/
	//main control window
	@Resource
	protected Window prodcat_mainWin; //main window
	@Resource
	protected Listbox prodcat_mainDataListView; //domain object summary list
	@Resource
	protected Paging prodcat_mainPaging; //paging control for summary list
	@Resource
	protected Component prodcat_mainDetail; //domain object detail
	@Resource
	protected Component prodcat_mainEdit; //edit panel
	//buttons
	@Resource
	protected Button prodcat_mainCreate; //new button
	@Resource
	protected Button prodcat_mainUpdate; //edit button
	@Resource
	protected Button prodcat_mainDelete; //delete button
	@Resource
	protected Button prodcat_mainSave; //save button
	@Resource
	protected Button prodcat_mainCancel; //cancel button

	
	
	/****** Bean Field Edit Components *******/
	protected Prodcat_main _tmpSelected; //store original selected entity
	
	
	
	/****** Controller state Fields *******/
	//ZK databinder
	protected DataBinder binder;
	//Prodcat_main Model
	@Resource
	protected Prodcat_mainModelBase prodcat_mainModel = null;
	//operation transient state
	protected boolean _create; //when new a entity
	protected boolean _editMode; //switch to edit mode when doing editing(new/update)
	protected int _lastSelectedIndex = -1; //last selectedIndex before delete
	protected boolean _supportPaging = true; //switch to use Paging
	protected boolean _supportFilter = true; //TODO: switch to use Filter
	protected String _filter; //filters
	
	
	public Prodcat_mainControllerBase(){}
	
	@AfterCompose
	public void afterCompose() { 
		//initial to read one record so binder.loadAll() will not trigger unnecessary SQL 
		//The prodcat_mainWin.onClientInfo will load correct lines
		if (isSupportPaging()) {
			prodcat_mainModel.setMaxResults(1);
		}
		binder = new AnnotateDataBinder(prodcat_mainWin);
		prodcat_mainWin.setVariable("prodcat_mainBinder", binder, true);
		binder.loadAll();
		
		final List model = (List) prodcat_mainDataListView.getModel(); 
		if (!model.isEmpty()) {
			prodcat_mainModel.setSelected((Prodcat_main)model.get(0));
			binder.loadComponent(prodcat_mainDetail);
		}
		setFocus();
	}
	
	public boolean isSupportPaging() {
		return _supportPaging;
	}
	
	public boolean isSupportFilter() {
		return _supportFilter;
	}
	
	public boolean isSupportExtra() {
		return isSupportFilter() || isSupportPaging();
	}
	
	public void setFilter(String filter) {
		_filter = filter;
	}
	
	public String getFilter() {
		return _filter;
	}
	
	@Resource
	protected Button prodcat_mainQuery;
	
	@EventHandler("prodcat_mainQuery.onClick")
	public void doFilter(){
		if (Strings.isBlank(_filter)) {
			prodcat_mainModel.setWhere(null);
			prodcat_mainModel.setParameters(null);
		} else {
			//TODO:shall process filter string into JPQL where statement here
			prepareQueryConditions();
		}
		refreshModel();
	}
	
	protected void prepareQueryConditions(){
		prodcat_mainModel.setWhere(" category_desc LIKE :category_desc OR isparent LIKE :isparent");
		
		final Map params = new HashMap();
		params.put("category_desc", "%"+_filter+"%");
		params.put("isparent", "%"+_filter+"%");
		prodcat_mainModel.setParameters(params);
	}
	
	public Prodcat_mainModelBase getModel() {
		return prodcat_mainModel;
	}

	public void setModel(Prodcat_mainModelBase prodcat_mainModel) {
		this.prodcat_mainModel = prodcat_mainModel;
	}
	
	public void refreshModel() {
		binder.loadAttribute(prodcat_mainDataListView, "model"); //reload model to force refresh
	}

	//-- view/edit mode --//
	public void setEditMode(boolean b) {
		_editMode = b;
		switchMode();
	}
	
	public boolean isViewMode() {
		return !_editMode;
	}
	
	public boolean isEditMode() {
		return _editMode; 
	}

	public boolean isCreate() {
		return _create;
	}
	
	public boolean isNotSelected() {
		return this.prodcat_mainModel.getSelected() == null;
	}

	private void switchMode() {
		binder.loadComponent(prodcat_mainDetail); //reload visible to force refresh
		setFocus();
	}
	
	private void setFocus() {
		//post event so doSetFocus after the listbox is loaded ready
		Events.postEvent(new Event("onSetFocus", prodcat_mainWin));
	}
	
	@EventHandler("prodcat_mainWin.onSetFocus")
	public void doSetFocus() {
		if (_editMode) {
			category_id.focus();
		} else {
			if (((List)prodcat_mainDataListView.getModel()).isEmpty()) {
				//no result in list, focus on new button
				prodcat_mainCreate.focus();
			} else {
				if (_create) {
					prodcat_mainCreate.focus();
				} else {
					setListFocus();
}
			}
		}
	}
	
	private void setListFocus() {
		final Listitem li = prodcat_mainDataListView.getSelectedItem();
		if (li != null) {
			li.focus();
		} else {
			if (prodcat_mainModel.getSelected() != null) {
				prodcat_mainCreate.focus();
			} else {
				prodcat_mainCreate.focus();
			}
		}
	}
	
	@EventHandler("prodcat_mainWin.onOK")
	public void doOK(Event event) {
		if (isEditMode()) {
			doSave(event);
		} else {
			doUpdate(event);
		}
	}
	
	@EventHandler("prodcat_mainWin.onClientInfo")
	public void doClientInfo(Event event) {
		if (isSupportPaging()) {
			final ClientInfoEvent evt = (ClientInfoEvent) event;
			int height = evt.getDesktopHeight();
			int pageSize = Math.max((height - 130) / 14, 10); //estimated page size, at least 10
			int currentPageSize = prodcat_mainModel.getMaxResults(); 
			if (currentPageSize != pageSize) {
				prodcat_mainModel.setMaxResults(pageSize);
				final int inviewIndex = prodcat_mainDataListView.getSelectedIndex() < 0 ? 
					prodcat_mainModel.getOffset() : (prodcat_mainModel.getOffset() + prodcat_mainDataListView.getSelectedIndex()); 
				final int activePage = inviewIndex / pageSize; //new active page
				final int offset = activePage * pageSize;
				prodcat_mainModel.setOffset(offset);
				refreshModel();
				prodcat_mainPaging.setPageSize(pageSize);
				prodcat_mainPaging.setActivePage(activePage);
				setFocus();
			}
		}
	}
	
	@EventHandler("prodcat_mainPaging.onPaging")
	public void doPaging(Event event) {
		if (isSupportPaging()) {
			final int activePage = prodcat_mainPaging.getActivePage();
			final int offset = activePage * prodcat_mainPaging.getPageSize();
			prodcat_mainModel.setOffset(offset);
			refreshModel();
			setFocus();
		}
	}
	
	//-- prodcat_mainDataListView control --//
	@EventHandler("prodcat_mainDataListView.onSelect")
	public void doSelect(Event event) {
		final int index = prodcat_mainDataListView.getSelectedIndex();
		if (index >= 0) {
			_lastSelectedIndex = index;
			_create = false;
		}
	}
	
	//-- view mode control --//
	@EventHandler("prodcat_mainWin.onCtrlKey")
	public void doCtrlKey(Event event) {
		final List items = prodcat_mainDataListView.getItems(); 
		if (!items.isEmpty() && (!_editMode || !_create)) {
			final int keycode = ((KeyEvent) event).getKeyCode();
			if (keycode == KeyEvent.DOWN || keycode == KeyEvent.UP){
				//handle no selected item case
				if (prodcat_mainDataListView.getSelectedIndex() < 0) { //no selected item
					//try our best to guess one
					if (_lastSelectedIndex >= 0) {
						final int index = Math.min(items.size() - 1, _lastSelectedIndex);
						prodcat_mainDataListView.setSelectedIndex(index);
						Events.sendEvent(new SelectEvent("onSelect", prodcat_mainDataListView, prodcat_mainDataListView.getSelectedItems()));
					}
				}
				setListFocus();
			}
		}
	}
	
	@EventHandler("prodcat_mainCreate.onClick")
	public void doCreate(Event event) {
		if (isViewMode()) {
			//prepare a new Prodcat_main
			_tmpSelected = prodcat_mainModel.getSelected();
			_create = true;
			prodcat_mainModel.setSelected(new Prodcat_main());
			
			//switch to edit mode
			setEditMode(true);
		}
	}
	
	@EventHandler("prodcat_mainUpdate.onClick")
	public void doUpdate(Event event) {
		if (isViewMode()) {
			if (prodcat_mainModel.getSelected() != null) {
				_create = false;

				//switch to edit mode
				setEditMode(true);
			}
		}
	}
	
	@EventHandler("prodcat_mainDelete.onClick")
	public void doDelete(Event event) {
		if (isViewMode()) {
			if (prodcat_mainModel.getSelected() != null) {
				_create = false;
				newConfirmDelete().show();
			}
		}
	}

	@EventHandler("prodcat_mainDelete.onDeleteYes")
	public void doDeleteYes(Event event) {
		if (isViewMode()) {
			beforeDelete();
			try {
				prodcat_mainModel.delete();
				prodcat_mainCreate.focus();		
			} catch (EntityNotFoundException e) { 
				//ignore, already deleted by others
			}
			prodcat_mainModel.setSelected(null);
			//refresh the todoList
			refreshModel();
			//update the prodcat_mainDetail
			switchMode();
		}
	}
	
	//-- sorting --//
	
	public void doSort(Event event) {
		final Listheader lh = (Listheader) event.getTarget();
		final String sortDirection = lh.getSortDirection(); //original direction
		if ("ascending".equals(sortDirection)) {
			final Comparator cmpr = lh.getSortDescending();
			if (cmpr instanceof FieldComparator) {
				final String orderBy = ((FieldComparator)cmpr).getOrderBy();
				prodcat_mainModel.setOrderBy(orderBy); //update query string
			}
		} else if ("descending".equals(sortDirection) || "natural".equals(sortDirection) || 
				Strings.isBlank(sortDirection)) {
			final Comparator cmpr = lh.getSortAscending();
			if (cmpr instanceof FieldComparator) {
				final String orderBy = ((FieldComparator)cmpr).getOrderBy();
				prodcat_mainModel.setOrderBy(orderBy); //update query string
			}
		}
		
		if (isSupportPaging()) {
			refreshModel();
		}
		setFocus();
	}
	
	//-- edit mode control --//
	@EventHandler("prodcat_mainSave.onClick")
	public void doSave(Event event) {
		if (isEditMode()) {
			//validate
			validate();

			//save into prodcat_main
			binder.saveComponent(prodcat_mainEdit); //reload model to force refresh
			
			//store into db
			if (_create) {
				beforeCreate();
				this.prodcat_mainModel.persist();
			} else {
				beforeUpdate();
				try {
					this.prodcat_mainModel.merge();
				} catch (EntityNotFoundException e1) {
					try {
						Messagebox.show(getUpdateDeletedMessage());
					} catch (InterruptedException e2) {
						//ignore
					}
				}
			}
			//refresh the todoList
			refreshModel();
			//switch to view mode
			setEditMode(false);
		}
	}

	@EventHandler("prodcat_mainCancel.onClick,prodcat_mainWin.onCancel")
	public void doCancel(Event event) {
		if (isEditMode()) {
			//restore to original selected Prodcat_main if cancel from new
			if (_create) {
				prodcat_mainModel.setSelected(_tmpSelected);
				_tmpSelected = null;
			}
			
			//switch to view mode
			setEditMode(false);
		}
	}
	
	//--To be override--// 
	/** Validate the input field */
	protected void validate() {
category_id.getValue();
isparent.getValue();

if(parentcat_id.getSelectedItem()==null){
	parentcat_id.setSelectedIndex(0);}
}
	
	/** The info message when end user trying to update a "deleted" entity. */
	protected String getUpdateDeletedMessage() {
		return "Cannot find the selected item, might have been deleted by others.";
	}
	
	/** Get a instance of ConfirmDelete class */
	protected ConfirmDelete newConfirmDelete() {
		return new ConfirmDelete();
	}
	
	/** Delete Confirmation */
	protected class ConfirmDelete {
		/** Show the ConfirmDelete Messagebox */
		public void show() {
			try {
				Messagebox.show(getConfirmMessage(),
				        getConfirmTitle(),
				        Messagebox.YES+Messagebox.NO,
				        Messagebox.EXCLAMATION,
				        new org.zkoss.zk.ui.event.EventListener() {
							public void onEvent(Event event) {
								if ("onYes".equals(event.getName())) {
									doYes();
								}
							}
						}
					);
			} catch (InterruptedException ex) {
				//ignore
			}
		}
		
		/** Operation when end user click Yes button in confirm delete Messagebox*/
		public void doYes() {
			//have to send Event to change the current IdSpace to "prodcat_mainWin" 
			Events.sendEvent(new Event("onDeleteYes", prodcat_mainDelete));
		}
	}
	
	protected String getConfirmMessage(){
		return "Are you sure?";
	}
	
	protected String getConfirmTitle(){
		return "Are you sure you want to delete the selected item?";
	}
	
	protected void beforeCreate(){
	}
	
	protected void beforeUpdate(){
	}
	
	protected void beforeDelete(){
	}
}
link publish delete flag offensive edit

answered 2010-04-03 01:11:26 +0800

techvts gravatar image techvts
120 2 5

updated 2010-04-03 01:14:32 +0800

Prodcat_mainController.java
package zkadsmine.prodcat_main;
import javax.annotation.Resource;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.spring.context.annotation.AfterCompose;
import org.zkoss.spring.context.annotation.AppliedTo;

@Scope("idspace")
@Controller @AppliedTo("prodcat_mainWin")
public class Prodcat_mainController extends zkadsmine.prodcat_main.base.Prodcat_mainControllerBase {
	@Resource
	protected Prodcat_mainModel prodcat_mainModel;
	
	public Prodcat_mainModel getProdcat_mainModel(){
		return prodcat_mainModel;
	}
	
@AfterCompose
	public void afterCompose() { 
		super.afterCompose();
		

	}
}

<b >Prodcat_main.java</b>
package zkadsmine.prodcat_main.base;



import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;




@Entity
@Table( name = "prodcat_main")
public class Prodcat_main
{
	//Generate Class Body.
	public boolean equals(Object obj) {
		if (this == obj) return true;
		if (obj == null) return false;
		if (!(obj instanceof Prodcat_main)) return false;
		Prodcat_main other = (Prodcat_main) obj;
		if (this.getCategory_id() == null) {
			if (other.getCategory_id() != null)return false;
		} else if (! this.getCategory_id().equals(other.getCategory_id()))return false;
		return true;
	}

	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((this.getCategory_id() == null) ? 0 : this.getCategory_id().hashCode());
		return result;
	}

	@Column(name = "category_id", nullable=false)
	@Id
	@GeneratedValue
	protected Long category_id;
	public void setCategory_id(Long value) {
		this.category_id = value;
	}
	public Long getCategory_id(){
		return this.category_id;
	}


	@Column(name = "category_desc")
	protected String category_desc;
	public void setCategory_desc(String value) {
		this.category_desc = value;
	}
	public String getCategory_desc(){
		return this.category_desc;
	}


	@Column(name = "isparent", nullable=false)
	protected String isparent;
	public void setIsparent(String value) {
		this.isparent = value;
	}
	public String getIsparent(){
		return this.isparent;
	}


	/*@Column(name = "parentcat_id", nullable=false)
	protected Long parentcat_id;
	public void setParentcat_id(Long value) {
		this.parentcat_id = value;
	}
	public Long getParentcat_id(){
		return this.parentcat_id;
	}
*/
	
	@javax.persistence.ManyToOne
	@JoinColumn(name ="parentcat_id", nullable=true)
	Prodcat_main prodcat_main;
	public void setProdcat_main(Prodcat_main value) {
		this.prodcat_main= value;
	}
	public Prodcat_main  getProdcat_main(){
		return this.prodcat_main;
	}
}

package zkadsmine.prodcat_main.base;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.HashMap;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import zkadsmine.prodcat_main.base.Prodcat_main;

import org.zkoss.lang.Strings;

import org.zkoss.spring.context.annotation.AfterCompose;
import org.zkoss.spring.context.annotation.EventHandler;
import org.zkoss.spring.jpa.EntityNotFoundException;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Page;
import org.zkoss.zk.ui.event.ClientInfoEvent;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.event.KeyEvent;
import org.zkoss.zk.ui.event.SelectEvent;
import org.zkoss.zkplus.databind.AnnotateDataBinder;
import org.zkoss.zkplus.databind.BindingListModel;
import org.zkoss.zkplus.databind.DataBinder;


/* */
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.FieldComparator;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Timebox;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listheader;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Spinner;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;
import org.zkoss.zul.Decimalbox;

import org.zkoss.zul.event.PageSizeEvent;
import org.zkoss.zul.event.PagingEvent;

public abstract class Prodcat_mainControllerBase {
	

	
	/****** Field Edit Components *******/
	@Resource
	protected Intbox category_id;
	@Resource
	protected Textbox category_desc;
	@Resource
	protected Textbox isparent;
	@Resource
	protected Listbox parentcat_id;


	
	
	/****** Zul Specific Application Control *******/
	//main control window
	@Resource
	protected Window prodcat_mainWin; //main window
	@Resource
	protected Listbox prodcat_mainDataListView; //domain object summary list
	@Resource
	protected Paging prodcat_mainPaging; //paging control for summary list
	@Resource
	protected Component prodcat_mainDetail; //domain object detail
	@Resource
	protected Component prodcat_mainEdit; //edit panel
	//buttons
	@Resource
	protected Button prodcat_mainCreate; //new button
	@Resource
	protected Button prodcat_mainUpdate; //edit button
	@Resource
	protected Button prodcat_mainDelete; //delete button
	@Resource
	protected Button prodcat_mainSave; //save button
	@Resource
	protected Button prodcat_mainCancel; //cancel button

	
	
	/****** Bean Field Edit Components *******/
	protected Prodcat_main _tmpSelected; //store original selected entity
	
	
	
	/****** Controller state Fields *******/
	//ZK databinder
	protected DataBinder binder;
	//Prodcat_main Model
	@Resource
	protected Prodcat_mainModelBase prodcat_mainModel = null;
	//operation transient state
	protected boolean _create; //when new a entity
	protected boolean _editMode; //switch to edit mode when doing editing(new/update)
	protected int _lastSelectedIndex = -1; //last selectedIndex before delete
	protected boolean _supportPaging = true; //switch to use Paging
	protected boolean _supportFilter = true; //TODO: switch to use Filter
	protected String _filter; //filters
	
	
	public Prodcat_mainControllerBase(){}
	
	@AfterCompose
	public void afterCompose() { 
		//initial to read one record so binder.loadAll() will not trigger unnecessary SQL 
		//The prodcat_mainWin.onClientInfo will load correct lines
		if (isSupportPaging()) {
			prodcat_mainModel.setMaxResults(1);
		}
		binder = new AnnotateDataBinder(prodcat_mainWin);
		prodcat_mainWin.setVariable("prodcat_mainBinder", binder, true);
		binder.loadAll();
		
		final List model = (List) prodcat_mainDataListView.getModel(); 
		if (!model.isEmpty()) {
			prodcat_mainModel.setSelected((Prodcat_main)model.get(0));
			binder.loadComponent(prodcat_mainDetail);
		}
		setFocus();
	}
	
	public boolean isSupportPaging() {
		return _supportPaging;
	}
	
	public boolean isSupportFilter() {
		return _supportFilter;
	}
	
	public boolean isSupportExtra() {
		return isSupportFilter() || isSupportPaging();
	}
	
	public void setFilter(String filter) {
		_filter = filter;
	}
	
	public String getFilter() {
		return _filter;
	}
	
	@Resource
	protected Button prodcat_mainQuery;
	
	@EventHandler("prodcat_mainQuery.onClick")
	public void doFilter(){
		if (Strings.isBlank(_filter)) {
			prodcat_mainModel.setWhere(null);
			prodcat_mainModel.setParameters(null);
		} else {
			//TODO:shall process filter string into JPQL where statement here
			prepareQueryConditions();
		}
		refreshModel();
	}
	
	protected void prepareQueryConditions(){
		prodcat_mainModel.setWhere(" category_desc LIKE :category_desc OR isparent LIKE :isparent");
		
		final Map params = new HashMap();
		params.put("category_desc", "%"+_filter+"%");
		params.put("isparent", "%"+_filter+"%");
		prodcat_mainModel.setParameters(params);
	}
	
	public Prodcat_mainModelBase getModel() {
		return prodcat_mainModel;
	}

	public void setModel(Prodcat_mainModelBase prodcat_mainModel) {
		this.prodcat_mainModel = prodcat_mainModel;
	}
	
	public void refreshModel() {
		binder.loadAttribute(prodcat_mainDataListView, "model"); //reload model to force refresh
	}

	//-- view/edit mode --//
	public void setEditMode(boolean b) {
		_editMode = b;
		switchMode();
	}
	
	public boolean isViewMode() {
		return !_editMode;
	}
	
	public boolean isEditMode() {
		return _editMode; 
	}

	public boolean isCreate() {
		return _create;
	}
	
	public boolean isNotSelected() {
		return this.prodcat_mainModel.getSelected() == null;
	}

	private void switchMode() {
		binder.loadComponent(prodcat_mainDetail); //reload visible to force refresh
		setFocus();
	}
	
	private void setFocus() {
		//post event so doSetFocus after the listbox is loaded ready
		Events.postEvent(new Event("onSetFocus", prodcat_mainWin));
	}
	
	@EventHandler("prodcat_mainWin.onSetFocus")
	public void doSetFocus() {
		if (_editMode) {
			category_id.focus();
		} else {
			if (((List)prodcat_mainDataListView.getModel()).isEmpty()) {
				//no result in list, focus on new button
				prodcat_mainCreate.focus();
			} else {
				if (_create) {
					prodcat_mainCreate.focus();
				} else {
					setListFocus();
}
			}
		}
	}
	
	private void setListFocus() {
		final Listitem li = prodcat_mainDataListView.getSelectedItem();
		if (li != null) {
			li.focus();
		} else {
			if (prodcat_mainModel.getSelected() != null) {
				prodcat_mainCreate.focus();
			} else {
				prodcat_mainCreate.focus();
			}
		}
	}
	
	@EventHandler("prodcat_mainWin.onOK")
	public void doOK(Event event) {
		if (isEditMode()) {
			doSave(event);
		} else {
			doUpdate(event);
		}
	}
	
	@EventHandler("prodcat_mainWin.onClientInfo")
	public void doClientInfo(Event event) {
		if (isSupportPaging()) {
			final ClientInfoEvent evt = (ClientInfoEvent) event;
			int height = evt.getDesktopHeight();
			int pageSize = Math.max((height - 130) / 14, 10); //estimated page size, at least 10
			int currentPageSize = prodcat_mainModel.getMaxResults(); 
			if (currentPageSize != pageSize) {
				prodcat_mainModel.setMaxResults(pageSize);
				final int inviewIndex = prodcat_mainDataListView.getSelectedIndex() < 0 ? 
					prodcat_mainModel.getOffset() : (prodcat_mainModel.getOffset() + prodcat_mainDataListView.getSelectedIndex()); 
				final int activePage = inviewIndex / pageSize; //new active page
				final int offset = activePage * pageSize;
				prodcat_mainModel.setOffset(offset);
				refreshModel();
				prodcat_mainPaging.setPageSize(pageSize);
				prodcat_mainPaging.setActivePage(activePage);
				setFocus();
			}
		}
	}
	
	@EventHandler("prodcat_mainPaging.onPaging")
	public void doPaging(Event event) {
		if (isSupportPaging()) {
			final int activePage = prodcat_mainPaging.getActivePage();
			final int offset = activePage * prodcat_mainPaging.getPageSize();
			prodcat_mainModel.setOffset(offset);
			refreshModel();
			setFocus();
		}
	}
	
	//-- prodcat_mainDataListView control --//
	@EventHandler("prodcat_mainDataListView.onSelect")
	public void doSelect(Event event) {
		final int index = prodcat_mainDataListView.getSelectedIndex();
		if (index >= 0) {
			_lastSelectedIndex = index;
			_create = false;
		}
	}
	
	//-- view mode control --//
	@EventHandler("prodcat_mainWin.onCtrlKey")
	public void doCtrlKey(Event event) {
		final List items = prodcat_mainDataListView.getItems(); 
		if (!items.isEmpty() && (!_editMode || !_create)) {
			final int keycode = ((KeyEvent) event).getKeyCode();
			if (keycode == KeyEvent.DOWN || keycode == KeyEvent.UP){
				//handle no selected item case
				if (prodcat_mainDataListView.getSelectedIndex() < 0) { //no selected item
					//try our best to guess one
					if (_lastSelectedIndex >= 0) {
						final int index = Math.min(items.size() - 1, _lastSelectedIndex);
						prodcat_mainDataListView.setSelectedIndex(index);
						Events.sendEvent(new SelectEvent("onSelect", prodcat_mainDataListView, prodcat_mainDataListView.getSelectedItems()));
					}
				}
				setListFocus();
			}
		}
	}
	
	@EventHandler("prodcat_mainCreate.onClick")
	public void doCreate(Event event) {
		if (isViewMode()) {
			//prepare a new Prodcat_main
			_tmpSelected = prodcat_mainModel.getSelected();
			_create = true;
			prodcat_mainModel.setSelected(new Prodcat_main());
			
			//switch to edit mode
			setEditMode(true);
		}
	}
	
	@EventHandler("prodcat_mainUpdate.onClick")
	public void doUpdate(Event event) {
		if (isViewMode()) {
			if (prodcat_mainModel.getSelected() != null) {
				_create = false;

				//switch to edit mode
				setEditMode(true);
			}
		}
	}
	
	@EventHandler("prodcat_mainDelete.onClick")
	public void doDelete(Event event) {
		if (isViewMode()) {
			if (prodcat_mainModel.getSelected() != null) {
				_create = false;
				newConfirmDelete().show();
			}
		}
	}

	@EventHandler("prodcat_mainDelete.onDeleteYes")
	public void doDeleteYes(Event event) {
		if (isViewMode()) {
			beforeDelete();
			try {
				prodcat_mainModel.delete();
				prodcat_mainCreate.focus();		
			} catch (EntityNotFoundException e) { 
				//ignore, already deleted by others
			}
			prodcat_mainModel.setSelected(null);
			//refresh the todoList
			refreshModel();
			//update the prodcat_mainDetail
			switchMode();
		}
	}
	
	//-- sorting --//
	
	public void doSort(Event event) {
		final Listheader lh = (Listheader) event.getTarget();
		final String sortDirection = lh.getSortDirection(); //original direction
		if ("ascending".equals(sortDirection)) {
			final Comparator cmpr = lh.getSortDescending();
			if (cmpr instanceof FieldComparator) {
				final String orderBy = ((FieldComparator)cmpr).getOrderBy();
				prodcat_mainModel.setOrderBy(orderBy); //update query string
			}
		} else if ("descending".equals(sortDirection) || "natural".equals(sortDirection) || 
				Strings.isBlank(sortDirection)) {
			final Comparator cmpr = lh.getSortAscending();
			if (cmpr instanceof FieldComparator) {
				final String orderBy = ((FieldComparator)cmpr).getOrderBy();
				prodcat_mainModel.setOrderBy(orderBy); //update query string
			}
		}
		
		if (isSupportPaging()) {
			refreshModel();
		}
		setFocus();
	}
	
	//-- edit mode control --//
	@EventHandler("prodcat_mainSave.onClick")
	public void doSave(Event event) {
		if (isEditMode()) {
			//validate
			validate();

			//save into prodcat_main
			binder.saveComponent(prodcat_mainEdit); //reload model to force refresh
			
			//store into db
			if (_create) {
				beforeCreate();
				this.prodcat_mainModel.persist();
			} else {
				beforeUpdate();
				try {
					this.prodcat_mainModel.merge();
				} catch (EntityNotFoundException e1) {
					try {
						Messagebox.show(getUpdateDeletedMessage());
					} catch (InterruptedException e2) {
						//ignore
					}
				}
			}
			//refresh the todoList
			refreshModel();
			//switch to view mode
			setEditMode(false);
		}
	}

	@EventHandler("prodcat_mainCancel.onClick,prodcat_mainWin.onCancel")
	public void doCancel(Event event) {
		if (isEditMode()) {
			//restore to original selected Prodcat_main if cancel from new
			if (_create) {
				prodcat_mainModel.setSelected(_tmpSelected);
				_tmpSelected = null;
			}
			
			//switch to view mode
			setEditMode(false);
		}
	}
	
	//--To be override--// 
	/** Validate the input field */
	protected void validate() {
category_id.getValue();
isparent.getValue();

if(parentcat_id.getSelectedItem()==null){
	parentcat_id.setSelectedIndex(0);}
}
	
	/** The info message when end user trying to update a "deleted" entity. */
	protected String getUpdateDeletedMessage() {
		return "Cannot find the selected item, might have been deleted by others.";
	}
	
	/** Get a instance of ConfirmDelete class */
	protected ConfirmDelete newConfirmDelete() {
		return new ConfirmDelete();
	}
	
	/** Delete Confirmation */
	protected class ConfirmDelete {
		/** Show the ConfirmDelete Messagebox */
		public void show() {
			try {
				Messagebox.show(getConfirmMessage(),
				        getConfirmTitle(),
				        Messagebox.YES+Messagebox.NO,
				        Messagebox.EXCLAMATION,
				        new org.zkoss.zk.ui.event.EventListener() {
							public void onEvent(Event event) {
								if ("onYes".equals(event.getName())) {
									doYes();
								}
							}
						}
					);
			} catch (InterruptedException ex) {
				//ignore
			}
		}
		
		/** Operation when end user click Yes button in confirm delete Messagebox*/
		public void doYes() {
			//have to send Event to change the current IdSpace to "prodcat_mainWin" 
			Events.sendEvent(new Event("onDeleteYes", prodcat_mainDelete));
		}
	}
	
	protected String getConfirmMessage(){
		return "Are you sure?";
	}
	
	protected String getConfirmTitle(){
		return "Are you sure you want to delete the selected item?";
	}
	
	protected void beforeCreate(){
	}
	
	protected void beforeUpdate(){
	}
	
	protected void beforeDelete(){
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<zk xmlns="http://www.zkoss.org/2005/zul">
<window id="prodcat_mainWin" width="100%" height="100%" ctrlKeys="#up#down">
<borderlayout>
<north size="60px">
	<borderlayout>
		<center border="none" style="background-color:#B1CBD5">
		<html><![CDATA[<h2 style="color:#0C7A9A;margin-left:10px">prodcat_main List Management</h2>]]></html></center>
		<east border="none" style="background-color:#B1CBD5">
		<toolbarbutton src="img/zkpowered_s.png" href="http://www.zkoss.org"/></east>
	</borderlayout>
</north>


<west size="640px" splittable="true" flex="true">
	<borderlayout id="beanSummary"><!-- ******************** Extra Control ******************** -->
		<north border="none" visible="@{prodcat_mainController.supportExtra}">
			<div>
				<hbox visible="@{prodcat_mainController.supportFilter}">Filter: 
					<textbox id="beanSearch" value="@{prodcat_mainController.filter}"/>
					<button id="prodcat_mainQuery" label="Query"/>	
				</hbox>
				<paging id="prodcat_mainPaging" totalSize="@{prodcat_mainModel.totalSize}" 
					visible="@{prodcat_mainController.supportPaging}"/>
			</div>
		</north>
		<center border="none" flex="true"><!-- ******************** List View of Table ******************** -->
			<listbox id="prodcat_mainDataListView" multiple="false" model="@{prodcat_mainModel.all}" 
				selectedItem="@{prodcat_mainModel.selected}" style="border:none">
				<listhead sizable="true"><!-- ******************** Generated By Bean Field Def ******************** -->
<listheader id="category_idHeader" label="Category_id"  />
<listheader id="category_descHeader" label="Category_desc"  />
<listheader id="isparentHeader" label="Isparent"  />
<listheader id="parentcat_idHeader" label="Parentcat_id"  />
<listheader id="parentcat_descHeader" label="Parentcat_desc"  />

				</listhead>
				<listitem self="@{each=zx1}"><!-- ******************** Generated By Bean Field Def ******************** -->
<listcell label="@{zx1.category_id}"/>
<listcell label="@{zx1.category_desc}"/>
<listcell label="@{zx1.isparent}"/>
<listcell label="@{zx1.prodcat_main.category_id}"/>
<listcell label="@{zx1.prodcat_main.category_desc}"/>

				</listitem>
			</listbox>
		</center>
	</borderlayout>
</west>
<center>
	<div id="prodcat_mainDetail">
		<!-- ******************** view mode ******************** -->
		<div id="beanView" visible="@{prodcat_mainController.viewMode}" width="100%">
			<grid width="100%" >
				<columns>
					<column align="right" width="117px"/>
					<column align="left"/>
				</columns>
				<rows><!-- ******************** Generated By Field Def ******************** -->
<row>Category_id :<label value="@{prodcat_mainModel.selected.category_id}"/></row>
<row>Category_desc :<label value="@{prodcat_mainModel.selected.category_desc}"/></row>
<row>Isparent :<label value="@{prodcat_mainModel.selected.isparent}"/></row>
<row>Parentcat_id :<label value="@{prodcat_mainModel.selected.prodcat_main.category_id}"/></row>
<row>Parentcat_desc :<label value="@{prodcat_mainModel.selected.prodcat_main.category_desc}"/></row>

				</rows>
			</grid>
			<separator/>
			<div align="right">
				<hbox>
					<button id="prodcat_mainCreate" label="New"/>
					<button id="prodcat_mainUpdate" label="Edit" disabled="@{prodcat_mainController.notSelected,load-when='prodcat_mainDataListView.onSelect'}"/>
					<button id="prodcat_mainDelete" label="Delete" disabled="@{prodcat_mainController.notSelected,load-when='prodcat_mainDataListView.onSelect'}"/>
				</hbox>
			</div>
		</div>
		
		<!-- ******************** edit mode ******************** -->
		<div id="prodcat_mainEdit" visible="@{prodcat_mainController.editMode}">
			<grid width="100%" fixedLayout="true">
				<columns>
					<column align="right" width="117px"/>
					<column align="left"/>
				</columns>
				<rows><!-- ******************** Generated By Field Def ******************** -->
<row>Category_id :<intbox id="category_id"   value="@{prodcat_mainModel.selected.category_id,save-when=none,access=load}" disabled="true" /></row>
<row>Category_desc :<textbox id="category_desc"   value="@{prodcat_mainModel.selected.category_desc,save-when=none}"/></row>
<row>Isparent :<textbox id="isparent"  constraint="no empty" value="@{prodcat_mainModel.selected.isparent,save-when=none}"/></row>
<!-- <row>Parentcat_id :<intbox id="parentcat_id"  constraint="no empty" value="@{prodcat_mainModel.selected.parentcat_id,save-when=none}"  /></row>-->
<row>Parentcat_id:
<listbox id="Parentcat_id" mold="select" rows="1" model="@{prodcat_mainController.prodcat_mainModel.all}"  selectedItem="@{prodcat_mainModel.selected.prodcat_main,save-when=none}">
</listbox>

<zscript><![CDATA[
       import zkadsmine.ui.ParentcatRenderer;
       Parentcat_id.setItemRenderer(new ParentcatRenderer());	 
	]]>
</zscript>
</row>

				</rows>
			</grid>
			<separator/>
			<div align="right">
				<hbox>
					<button id="prodcat_mainSave" label="Save"/>
					<button id="prodcat_mainCancel" label="Cancel"/>
				</hbox>
			</div>
		</div>
	</div>
</center>
</borderlayout>
</window>
</zk>
table structure is given in above post i had done changes to acheive the foreign key constraint but my foreign key references from same table so i get circular references bean problem . plz try to see where i am wrong thanks for u r help
link publish delete flag offensive edit
Your reply
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: 2010-04-01 01:55:27 +0800

Seen: 574 times

Last updated: Apr 03 '10

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