package com.zk;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zk.ui.util.Composer;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;
import com.hibernate.entity.Info;
import com.service.Service;
/**
* @author AnnBabyLive
*
*/
public class MyComposer implements Composer {
protected Textbox name;
protected Textbox address;
private Service service;
public void setService(Service service) {
this.service = service;
}
public void init(Component component){
//将当前对象的变量和参数对象进行绑定
Components.wireVariables(component, this);
//转发一个当前的事件方法到所对应名称的Component()
Components.addForwards(component, this);
//注册一个监听到当前的对象
Events.addEventListeners(component, this);
}
public void doAfterCompose(Component component) throws Exception {
init(component);
}
/**
*
*
* onClick$save
* onClick=事件名称
* save=对应的Component id
* $必须的!
*
*/
public void onClick$save(Event e){
Info info=new Info();
info.setName(name.getValue());
info.setAddress(address.getValue());
service.saveInfo(info);
showMes("录入成功!");
}
public void showMes(String message){
try {
Messagebox.show(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation"
value="/WEB-INF/hibernate.cfg.xml">
</property>
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="baseHibernateDAO" class="com.hibernate.dao.BaseHibernateDAOImp">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="infoDAO" class="com.hibernate.dao.InfoDAO" parent="baseHibernateDAO"/>
<bean id="service" class="com.service.ServiceImp">
<property name="infoDAO" ref="infoDAO"/>
</bean>
<bean id="myWindow" class="com.zk.MyComposer" scope="prototype">
<property name="service" ref="service"/>
</bean>
</beans>
<?page id="testZul" title=" New ZUL Title" cacheable="false"
language="xul/html" zscriptLanguage="Java" contentType="text/html;charset=UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>
<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
<zk xmlns="http://www.zkoss.org/2005/zul"
xmlns:h="http://www.w3.org/1999/xhtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
<window title="My First Window" border="normal" width="200px" apply="${myWindow}">
<label value="Name:"/><textbox id="name"/>
<label value="Address:"/><textbox id="address"/>
<button id="save" label="Save"/>
</window>
</zk>
一定要加<?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?>
name,address,save一定要和MyComposer.class里面的一样
public class ServiceImp implements Service {
private InfoDAO infoDAO;
public void setInfoDAO(InfoDAO infoDAO) {
this.infoDAO = infoDAO;
}
@Transactional(propagation=Propagation.REQUIRED,rollbackFor={RuntimeException.class})
public void saveInfo(Info info) {
this.infoDAO.save(info);
}
}
也可以让MyComposer extends GenericForwardComposer || GenericAutowireComposer
然后再doAfterCompose调用父类的doAfterCompose方法,这样就不用去写init方法了!
不过还是觉的写init 要比extends一个Class好!
部分代码再上传的文件里