zk+hibernate+spring零配置
zk+hibernate+spring零配置
?
zk5.0.5
?
hibernate3.6
?
spring3.05
?
也许你在使用apply或者use一个类名的或者<?variable-resolver alt="zk+hibernate+spring0配置">?
?
?二,zk controller 注解配置,注意scope必须是prototype,因为composer是一个状态对象
?
?
???
?然后在window apply中使用,其中z是prefix="z" 中的z,ctrl是zktools.jar中定义的一个el函数,这个和c标签很类? 似,?'loginController'是【二】中LoginController类spring 受管理bean名字,通常我们喜欢使用
长长的类路径apply="org.zkway.web.controller.LoginController",?
但这样创建的对象不是spring管理,你无法向LoginController类里注入service,当然你可以使用SpringUtil.getBean
获取bean事例,但就丧失使用annotation的好处了
?
?
??
?
?
?完整使用
?
?
?
??
?
?
?
?
?
四,获取spring bean的el函数
在【三】中的页面zul中,我们仅仅简单的使用了一个表达式${z:ctrl('loginController')}, 这个表达式由
zk框架解释,还记的我们在页面首部添加的一个指令吗?
<?taglib uri="http://www.zkoss.org/zktools/zktools" prefix="z" ?>
和jsp c标签类似, zk中的标签也是在tld文件中定义的,大部分的web容器都可以自动加载tld文件,
zk也是一样,但zk不会自动加载tld,它自动加载类路径下的一个metainfo/tld/config.xml文件,这是zk的约定
?
?
?
?
在config.xml文件中我定义了如下内容,当然这些也是zk的约定,taglib-location告诉zk框架tld文件位置,
那么zk自动去找这个文件并解析
?
??
那么我们看看zktools.tld里如何定义的
?
?????
将controller注册为spring bean
?
?@Controller@Scope("prototype")public class LoginController extends GenericAutowireComposer {?
然后我们需要解决的问题是如何获取bean,如果直接apply或use一个类名,
那么类实例由zk创建,我们无法享受spring管理bean给我们带来的任何好处。
?
也许会这么做,就是在forward到一个zul页面前,先将spring bean放在可用作用域(execution,request,session,ThreadLocal),
然后目标页面直接使用el表达式获取${reqeustScope['loginController']},但实际项目中,下一站到底是什么,大多数情况我们是无法预知的,
只有到达目标你才能知道结果,所以预先读取bean很多情况下有他的局限性。
?
在本文中我定义了一个el函数ctrl,这个函数的参数为spring bean名字,el函数的返回值是spring管理的bean事例
?
?
大致流程如下
?
spring scan bean ---> register controller bean ---> el function 获取 spring bean -->zk interpret -