Using Spring Variable Resolver"

From Documentation
Line 8: Line 8:
 
Lets define a simple bean first
 
Lets define a simple bean first
 
<source lang="java">
 
<source lang="java">
 +
package org.zkoss.zkspringessentials.beans;
 +
 
public class SimpleBean {
 
public class SimpleBean {
  
Line 25: Line 27:
 
}
 
}
 
</source>
 
</source>
Declare this bean in your applicationContext.xml Spring configuration file as below
+
Since Spring 3.0 you have different ways of declaring your beans. First and traditional way is to declare this bean in your applicationContext.xml Spring configuration file as below
 
<source lang="xml">
 
<source lang="xml">
 
<bean id="simpleBean" class="org.zkoss.zkspringessentials.beans.SimpleBean">
 
<bean id="simpleBean" class="org.zkoss.zkspringessentials.beans.SimpleBean">
Line 31: Line 33:
 
</bean>
 
</bean>
 
</source>
 
</source>
 +
 +
or you can also let Spring auto-discover your bean (normally used for auto-wiring dependencies) by specifying your bean package on the Spring context component scan element as shown below
 +
 +
<source lang="xml" high="8,9">
 +
<beans xmlns="http://www.springframework.org/schema/beans"
 +
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +
              xmlns:context="http://www.springframework.org/schema/context"
 +
              xsi:schemaLocation="http://www.springframework.org/schema/beans
 +
                          http://www.springframework.org/schema/beans/spring-beans.xsd
 +
                          http://www.springframework.org/schema/context
 +
                          http://www.springframework.org/schema/context/spring-context.xsd">
 +
        <context:component-scan  base-package="org.zkoss.zkspringessentials.beans">
 +
          </context:component-scan>
 +
</beans>
 +
</source>
 +
 
Now using the <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> you can acess this bean in ZSCRIPT, EL expressions and ZK data binding annotations
 
Now using the <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> you can acess this bean in ZSCRIPT, EL expressions and ZK data binding annotations
 
====Acess Spring beans in ZSCRIPT====
 
====Acess Spring beans in ZSCRIPT====

Revision as of 10:44, 13 June 2011

Using Spring Variable Resolver



Purpose

Access Spring managed bean within ZK framework

DelegatingVariableResolver

You can access any spring managed beans by its id within ZK for eg. on ZUML page by declaring variable-resolver for DelegatingVariableResolver at the top of your ZUML page.

Lets define a simple bean first

package org.zkoss.zkspringessentials.beans;

public class SimpleBean {

        private String message;
        
        public SimpleBean() {
        }
        public SimpleBean(String msg) {
                this.message = msg;
        }
        public String getMessage() {
                return message;
        }
        public void setMessage(String message) {
                this.message = message;
        }
}

Since Spring 3.0 you have different ways of declaring your beans. First and traditional way is to declare this bean in your applicationContext.xml Spring configuration file as below

<bean id="simpleBean" class="org.zkoss.zkspringessentials.beans.SimpleBean">
        <constructor-arg value="Hello from a simple bean"></constructor-arg>
</bean>

or you can also let Spring auto-discover your bean (normally used for auto-wiring dependencies) by specifying your bean package on the Spring context component scan element as shown below

<beans xmlns="http://www.springframework.org/schema/beans"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:context="http://www.springframework.org/schema/context"
               xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd">
         <context:component-scan  base-package="org.zkoss.zkspringessentials.beans">
          </context:component-scan>
</beans>

Now using the DelegatingVariableResolver you can acess this bean in ZSCRIPT, EL expressions and ZK data binding annotations

Acess Spring beans in ZSCRIPT

You can access SimpleBean by its bean id in ZSCRIPT as shown below

<?xml version="1.0" encoding="UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<zscript>
        String msg = simpleBean.message;
</zscript>
<window title="Bean in ZScript" width="640px" border="normal" >
    <vbox>
        <hbox>
            <label value="${msg}"></label>
        </hbox>
    </vbox> 
</window>
</zk>

Access Spring beans in EL expressions

Similarly you can also access Spring managed beans in any EL expressions as shown below

<?xml version="1.0" encoding="UTF-8"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<window title="Bean in EL Expression" width="640px" border="normal" >
    <vbox>
        <hbox>
            <label value="${simpleBean.message}"></label>
        </hbox>
    </vbox> 
</window>
</zk>

Access Spring beans in ZK Databinding annotations

Coupling ZK AnnotateDataBinderInit with DelegatingVariableResolver Spring beans can also be used in ZK Databinding expressions as shown below. Let's first define a Person bean class with two fields for holding first name and last name String variables with corresponding setters/getters

public class Person {
        private String _firstName = "";
        private String _lastName = "";

        // getter and setters
        public void setFirstName(String firstName) {
                _firstName = firstName;
        }

        public String getFirstName() {
                return _firstName;
        }

        public void setLastName(String lastName) {
                _lastName = lastName;
        }

        public String getLastName() {
                return _lastName;
        }

        public void setFullName(String f) {
                // do nothing.
        }

        public String getFullName() {
                return _firstName + " " + _lastName;
        }
}

and declare this bean in applicationContext.xml Spring configuration file as shown below

<bean id="person" class="org.zkoss.zkspringessentials.beans.Person">
        <property name="firstName" value="John"></property>
        <property name="lastName" value="Woo"></property>
</bean>

Now we can populate ZK grid component using ZK databinding mechanism that binds Person bean first name and last name properies with corresponding textboxes

<?xml version="1.0" encoding="UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit" ?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<window title="Bean in ZK databinding annotations" width="640px" border="normal" >
    <grid width="400px">
        <rows>
            <row> First Name: <textbox value="@{person.firstName}"/></row>
            <row> Last Name: <textbox value="@{person.lastName}"/></row>
            <row> Full Name: <label value="@{person.fullName}"/></row>
        </rows>
    </grid>
</window>
</zk>

SpringUtil

You can also access Spring beans on a ZUML page without DelegatingVariableResolver by using a utility class SpringUtil method SpringUtil.getBean(). Here is an example code to demonstrate this

<?xml version="1.0" encoding="UTF-8"?>
<zk>
<zscript>
        import org.zkoss.zkplus.spring.SpringUtil;
        import org.zkoss.zkspringessentials.beans.*;
        SimpleBean simple = SpringUtil.getBean("simpleBean");
        String msg = simple.getMessage();
</zscript>
<window title="Example for SpringUtil#getBean" width="640px" border="normal" >
    <vbox>
        <hbox>
            <label value="${msg}"></label>
        </hbox>
    </vbox> 
</window>
</zk>

Version History

Last Update : 2011/06/13


Version Date Content
     



Last Update : 2011/06/13

Copyright © Potix Corporation. This article is licensed under GNU Free Documentation License.