Using Spring Variable Resolver"
(43 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
+ | {{ZKSpringEssentialsPageHeader}} | ||
+ | |||
===Purpose=== | ===Purpose=== | ||
Access Spring managed bean within ZK framework | Access Spring managed bean within ZK framework | ||
+ | |||
+ | We assume you are already familiar with the Spring Framework - If not please '''refer to the official and extensive [https://docs.spring.io/spring/docs/current/spring-framework-reference/ Spring Framework Documentation]. | ||
+ | ''' | ||
+ | |||
===DelegatingVariableResolver=== | ===DelegatingVariableResolver=== | ||
− | You can access any spring managed beans by its id within ZK for | + | |
+ | You can access any spring managed beans by its id within ZK, for example, on the ZUML page by declaring <code>variable-resolver</code> for <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> at the top of your ZUML page. | ||
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 { | ||
− | |||
private String message; | private String message; | ||
− | |||
− | |||
public SimpleBean(String msg) { | public SimpleBean(String msg) { | ||
this.message = msg; | this.message = msg; | ||
Line 17: | Line 22: | ||
public String getMessage() { | public String getMessage() { | ||
return message; | return message; | ||
− | |||
− | |||
− | |||
} | } | ||
} | } | ||
</source> | </source> | ||
− | + | ||
+ | Spring offers different ways of declaring your beans. The classical 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"> | ||
− | + | <constructor-arg value="Hello from a simple bean"/> | |
− | + | </bean> | |
+ | </source> | ||
+ | |||
+ | The alternative Java Config to achieve the same (choose for yourself: Spring and ZK will treat both beans equivalently during runtime): | ||
+ | |||
+ | <source lang="java"> | ||
+ | @Bean | ||
+ | public SimpleBean simpleBean() { | ||
+ | return new SimpleBean("Hello from a simple bean"); | ||
+ | } | ||
</source> | </source> | ||
− | Now using the < | + | |
− | ==== | + | Now using the <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> you can access this bean in ZSCRIPT, EL expressions and ZK data binding annotations. |
+ | |||
+ | ====Access Spring beans in ZSCRIPT==== | ||
You can access SimpleBean by its bean id in ZSCRIPT as shown below | You can access SimpleBean by its bean id in ZSCRIPT as shown below | ||
− | <source lang="xml" | + | <source lang="xml" highlight="1,4"> |
− | |||
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | ||
− | <zk | + | <zk> |
<zscript> | <zscript> | ||
String msg = simpleBean.message; | String msg = simpleBean.message; | ||
</zscript> | </zscript> | ||
<window title="Bean in ZScript" width="640px" border="normal" > | <window title="Bean in ZScript" width="640px" border="normal" > | ||
− | + | <label value="${msg}"/> | |
− | |||
− | |||
− | |||
− | |||
</window> | </window> | ||
</zk> | </zk> | ||
</source> | </source> | ||
+ | |||
====Access Spring beans in EL expressions==== | ====Access Spring beans in EL expressions==== | ||
Similarly you can also access Spring managed beans in any EL expressions as shown below | Similarly you can also access Spring managed beans in any EL expressions as shown below | ||
− | <source lang="xml" | + | <source lang="xml" highlight="1,4"> |
− | |||
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | ||
− | <zk | + | <zk> |
<window title="Bean in EL Expression" width="640px" border="normal" > | <window title="Bean in EL Expression" width="640px" border="normal" > | ||
− | + | <label value="${simpleBean.message}"/> | |
− | |||
− | |||
− | |||
− | |||
</window> | </window> | ||
</zk> | </zk> | ||
Line 65: | Line 71: | ||
====Access Spring beans in ZK Databinding annotations==== | ====Access Spring beans in ZK Databinding annotations==== | ||
− | + | The same <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> also resolves Spring beans in ZK Databinding expressions: | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | <source lang="xml" | + | <source lang="xml" highlight="1,5"> |
− | |||
− | |||
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> | ||
− | <zk | + | <zk> |
− | <window title="Bean in | + | <window title="Bean in Databinding Annotation" width="640px" border="normal" |
− | + | viewModel="..."> | |
− | + | <label value="@load(simpleBean.message)"/> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</window> | </window> | ||
</zk> | </zk> | ||
</source> | </source> | ||
+ | |||
===SpringUtil=== | ===SpringUtil=== | ||
− | You can also access Spring beans on a ZUML page without < | + | You can also access Spring beans on a ZUML page without <javadoc>org.zkoss.zkplus.spring.DelegatingVariableResolver</javadoc> by using a utility class <javadoc>org.zkoss.zkplus.spring.SpringUtil</javadoc> method <javadoc method="getBean()">org.zkoss.zkplus.spring.SpringUtil</javadoc>. Here is an example code to demonstrate this |
− | <source lang="xml" | + | <source lang="xml" highlight="5"> |
− | + | <zk> | |
− | <zk | ||
<zscript> | <zscript> | ||
import org.zkoss.zkplus.spring.SpringUtil; | import org.zkoss.zkplus.spring.SpringUtil; | ||
Line 137: | Line 95: | ||
</zscript> | </zscript> | ||
<window title="Example for SpringUtil#getBean" width="640px" border="normal" > | <window title="Example for SpringUtil#getBean" width="640px" border="normal" > | ||
− | + | <label value="${msg}"/> | |
− | |||
− | |||
− | |||
− | |||
</window> | </window> | ||
</zk> | </zk> | ||
</source> | </source> | ||
− | + | ||
− | {{ | + | {{ZKSpringEssentialsPageFooter}} |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 08:45, 13 December 2022
Purpose
Access Spring managed bean within ZK framework
We assume you are already familiar with the Spring Framework - If not please refer to the official and extensive Spring Framework Documentation.
DelegatingVariableResolver
You can access any spring managed beans by its id within ZK, for example, on the 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(String msg) {
this.message = msg;
}
public String getMessage() {
return message;
}
}
Spring offers different ways of declaring your beans. The classical 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"/>
</bean>
The alternative Java Config to achieve the same (choose for yourself: Spring and ZK will treat both beans equivalently during runtime):
@Bean
public SimpleBean simpleBean() {
return new SimpleBean("Hello from a simple bean");
}
Now using the DelegatingVariableResolver you can access this bean in ZSCRIPT, EL expressions and ZK data binding annotations.
Access Spring beans in ZSCRIPT
You can access SimpleBean by its bean id in ZSCRIPT as shown below
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<zscript>
String msg = simpleBean.message;
</zscript>
<window title="Bean in ZScript" width="640px" border="normal" >
<label value="${msg}"/>
</window>
</zk>
Access Spring beans in EL expressions
Similarly you can also access Spring managed beans in any EL expressions as shown below
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<window title="Bean in EL Expression" width="640px" border="normal" >
<label value="${simpleBean.message}"/>
</window>
</zk>
Access Spring beans in ZK Databinding annotations
The same DelegatingVariableResolver also resolves Spring beans in ZK Databinding expressions:
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk>
<window title="Bean in Databinding Annotation" width="640px" border="normal"
viewModel="...">
<label value="@load(simpleBean.message)"/>
</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
<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" >
<label value="${msg}"/>
</window>
</zk>