0

inject Spring bean

asked 2008-09-23 09:59:22 +0800

A gravatar image A
117 2

I had to learn after <ZK with Spring DAO and JDBC>
in zul page

<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
                         .......
                         <zscript>
			userManger.validateLoginId("cary");
		</zscript>
                         ............
                          

and in spring-config.xml
<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>org/sinokru/user/User.hbm.xml</value>
			</list>
		</property>
	</bean>
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<bean id="userManger"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<property name="target">
			<ref bean="usermgr" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="*">PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED</prop>
				<prop key="update*">PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED</prop>
				<prop key="delete*">PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED</prop>
				<prop key="find*">PROPAGATION_REQUIRED, ISOLATION_READ_COMMITTED, readOnly</prop>
			</props>
		</property>
	</bean>
	<bean id="usermgr" class="org.sinokru.service.impl.UserManagerImpl">
		<property name="userDAO" ref="userDAO"></property>
	</bean>
	<bean id="userDAO" class="org.sinokru.user.UserDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

exception
Servlet.service() for servlet zkLoader threw exception
org.zkoss.zk.ui.UiException: Sourced file: inline evaluation of: ``userManger.validateLoginId("cary");'' : Attempt to resolve method: validateLoginId() on undefined variable or class name: userManger : at Line: 1 : in file: inline evaluation of: ``userManger.validateLoginId("cary");'' : userManger .validateLoginId ( "cary" ) 

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.zkoss.lang.Classes.newInstance(Classes.java:78)
	at org.zkoss.lang.Exceptions.wrap(Exceptions.java:164)
	at org.zkoss.zk.ui.UiException$Aide.wrap(UiException.java:46)
	at org.zkoss.zk.scripting.bsh.BSHInterpreter.exec(BSHInterpreter.java:103)
	at org.zkoss.zk.scripting.util.GenericInterpreter.interpret(GenericInterpreter.java:292)
	at org.zkoss.zk.ui.impl.PageImpl.interpret(PageImpl.java:858)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execNonComponent(UiEngineImpl.java:728)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:547)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:492)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild0(UiEngineImpl.java:612)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:581)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:525)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreateChild(UiEngineImpl.java:557)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate0(UiEngineImpl.java:525)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execCreate(UiEngineImpl.java:492)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage0(UiEngineImpl.java:374)
	at org.zkoss.zk.ui.impl.UiEngineImpl.execNewPage(UiEngineImpl.java:296)
	at org.zkoss.zk.ui.http.DHtmlLayoutServlet.process(DHtmlLayoutServlet.java:227)
	at org.zkoss.zk.ui.http.DHtmlLayoutServlet.doGet(DHtmlLayoutServlet.java:167)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)


but I can use this method to get bean
ApplicationContext ctx = 	WebApplicationContextUtils.getRequiredWebApplicationContext(	(ServletContext)getDesktop().getWebApp().getNativeContext());taskDAO = (userManager)ctx.getBean("userManager");

delete flag offensive retag edit

6 Replies

Sort by ยป oldest newest

answered 2008-09-24 02:42:49 +0800

robbiecheng gravatar image robbiecheng
1144 2
http://robbiecheng.sys-co...

It's a typo in your zul page.
The bean name should be "userManager".

/robbie

link publish delete flag offensive edit

answered 2008-09-24 03:18:42 +0800

A gravatar image A
117 2

thank you,This is my slip of a pen,in fact,My Spring is written like this
bean id="userManger" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
But the problem is not here,It still does not get bean and same Exception.

link publish delete flag offensive edit

answered 2008-10-01 05:37:12 +0800

robbiecheng gravatar image robbiecheng
1144 2
http://robbiecheng.sys-co...

Did you add spring listener in your web.xml?

	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

/robbie

link publish delete flag offensive edit

answered 2008-10-01 09:14:43 +0800

A gravatar image A
117 2

yes,I did.I can only use this method to get bean

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ctx.getBean();

the dao test is very normal,I can't find the find out the reasons.

link publish delete flag offensive edit

answered 2008-10-01 10:14:33 +0800

robbiecheng gravatar image robbiecheng
1144 2
http://robbiecheng.sys-co...

Yes, it's weired.
Try to add the following lines into your web.xml to tell spring the location of your config file.

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>

Note: This should be declared before the listener of spring.

/robbie

link publish delete flag offensive edit

answered 2008-10-09 10:13:50 +0800

A gravatar image A
117 2

very very thank you,I was foolish, even where no wrong
But this is not the case <param-value>/WEB-INF/applicationContext.xml</param-value>
This is especially so in <param-value>/WEB-INF/classes/applicationContext.xml</param-value>

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: 2008-09-23 09:59:22 +0800

Seen: 324 times

Last updated: Oct 09 '08

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