sheet.zul <?variable-resolver class="org.zkoss.zkplus.spring.DelegatingVariableResolver"?> <window> Quarter: <listbox id="quarter" mold="select" rows="1" onSelect="refreshQuarter()"> <listitem value="0" label="Select"/> <listitem value="1" label="Quarter 1"/> <listitem value="2" label="Quarter 2"/> <listitem value="3" label="Quarter 3"/> <listitem value="4" label="Quarter 4"/> </listbox> Style: <listbox id="style" mold="select" rows="1" onSelect="changeStyle()"> <listitem label="Style 1" value="/BalanceSheet.xls"/> <listitem label="Style 2" value="/NewSheet.xls"/> </listbox> <zscript> void refreshQuarter() { Listitem listitem = quarter.getSelectedItem(); int quarter = Integer.parseInt(listitem.value); //Call the method to reload data database.reloadQuarter(quarter); //Call the method to refresh values of cells balance.book.notifyChange(new String[]{"dataBean"}); } void changeStyle() { //Change the URL of spreadsheet balance.url = style.getSelectedItem().value; } //Initial data, ZK will find it via DelegatingVariableResolver. database.reloadQuarter(0); </zscript> <spreadsheet id="balance" url="/BalanceSheet.xls" maxrow="40" maxcolumn="20" height="600px" width="1300px"/> </window> spring-config.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataBean" class="model.DataBean"/> <bean id="database" class="model.Database"> <property name="dataBean"> <ref bean="dataBean"/> </property> </bean> </beans> web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <display-name>ZssSpring</display-name> <!-- <icon> <small-icon></small-icon> <large-icon></large-icon> </icon> --> <!-- Spring ApplicationContext --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-config.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- --> <!-- ZK --> <listener> <description>Used to cleanup when a session is destroyed</description> <display-name>ZK Session Cleaner</display-name> <listener-class>org.zkoss.zk.ui.http.HttpSessionListener</listener-class> </listener> <servlet> <description>ZK loader for ZUML pages</description> <servlet-name>zkLoader</servlet-name> <servlet-class>org.zkoss.zk.ui.http.DHtmlLayoutServlet</servlet-class> <!-- Must. Specifies URI of the update engine (DHtmlUpdateServlet). It must be the same as <url-pattern> for the update engine. --> <init-param> <param-name>update-uri</param-name> <param-value>/zkau</param-value> </init-param> <!-- Optional. Specifies whether to compress the output of the ZK loader. It speeds up the transmission over slow Internet. However, if you configure a filter to post-processing the output, you might have to disable it. Default: true <init-param> <param-name>compress</param-name> <param-value>true</param-value> </init-param> --> <!-- Optional. Specifies the default log level: OFF, ERROR, WARNING, INFO, DEBUG and FINER. If not specified, the system default is used. <init-param> <param-name>log-level</param-name> <param-value>OFF</param-value> </init-param> --> <load-on-startup>1</load-on-startup><!-- Must --> </servlet> <servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>*.zul</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>*.zhtml</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>*.svg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>*.xml2html</url-pattern> </servlet-mapping> <!-- Optional. Uncomment it if you want to use richlets. --> <servlet-mapping> <servlet-name>zkLoader</servlet-name> <url-pattern>/zk/*</url-pattern> </servlet-mapping> <servlet> <description>The asynchronous update engine for ZK</description> <servlet-name>auEngine</servlet-name> <servlet-class>org.zkoss.zk.au.http.DHtmlUpdateServlet</servlet-class> <!-- [Optional] Specifies the AU processor for particular prefix. <init-param> <param-name>processor0</param-name> <param-value>/upload=com.my.MyUploader</param-value> </init-param> --> </servlet> <servlet-mapping> <servlet-name>auEngine</servlet-name> <url-pattern>/zkau/*</url-pattern> </servlet-mapping> <!-- Uncomment if you want to use the ZK filter to post process the HTML output generated by other technology, such as JSP and velocity. <filter> <filter-name>zkFilter</filter-name> <filter-class>org.zkoss.zk.ui.http.DHtmlLayoutFilter</filter-class> <init-param> <param-name>extension</param-name> <param-value>html</param-value> </init-param> <init-param> <param-name>compress</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>zkFilter</filter-name> <url-pattern>/test/filter.dsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>zkFilter</filter-name> <url-pattern>/test/filter2.dsp</url-pattern> </filter-mapping> --> <!-- / --> <!-- DSP (optional) --> <!-- Uncomment if you want to use Potix DSP in your Website <servlet> <servlet-name>dspLoader</servlet-name> <servlet-class>org.zkoss.web.servlet.dsp.InterpreterServlet</servlet-class> <init-param> <param-name>class-resource</param-name> <param-value>true</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dspLoader</servlet-name> <url-pattern>*.dsp</url-pattern> </servlet-mapping> --> <!-- /// --> <!-- Miscellaneous --> <session-config> <session-timeout>60</session-timeout> </session-config> <!-- MIME mapping --> <mime-mapping> <extension>doc</extension> <mime-type>application/vnd.ms-word</mime-type> </mime-mapping> <mime-mapping> <extension>gif</extension> <mime-type>image/gif</mime-type> </mime-mapping> <mime-mapping> <extension>htm</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>html</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>jad</extension> <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type> </mime-mapping> <mime-mapping> <extension>jnlp</extension> <mime-type>application/x-java-jnlp-file</mime-type> </mime-mapping> <mime-mapping> <extension>jpeg</extension> <mime-type>image/jpeg</mime-type> </mime-mapping> <mime-mapping> <extension>jpg</extension> <mime-type>image/jpeg</mime-type> </mime-mapping> <mime-mapping> <extension>js</extension> <mime-type>application/x-javascript</mime-type> </mime-mapping> <mime-mapping> <extension>pdf</extension> <mime-type>application/pdf</mime-type> </mime-mapping> <mime-mapping> <extension>png</extension> <mime-type>image/png</mime-type> </mime-mapping> <mime-mapping> <extension>rar</extension> <mime-type>application/x-rar-compressed</mime-type> </mime-mapping> <mime-mapping> <extension>txt</extension> <mime-type>text/plain</mime-type> </mime-mapping> <mime-mapping> <extension>xls</extension> <mime-type>application/vnd.ms-excel</mime-type> </mime-mapping> <mime-mapping> <extension>xml</extension> <mime-type>text/xml</mime-type> </mime-mapping> <mime-mapping> <extension>xul</extension> <mime-type>application/vnd.mozilla.xul-xml</mime-type> </mime-mapping> <mime-mapping> <extension>zhtml</extension> <mime-type>text/html</mime-type> </mime-mapping> <mime-mapping> <extension>zip</extension> <mime-type>application/x-zip</mime-type> </mime-mapping> <mime-mapping> <extension>zul</extension> <mime-type>text/html</mime-type> </mime-mapping> <welcome-file-list> <welcome-file>index.zul</welcome-file> <welcome-file>index.zhtml</welcome-file> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> </welcome-file-list> </web-app> DataBean.java // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://kpdus.tripod.com/jad.html // Decompiler options: packimports(3) // Source File Name: DataBean.java package model; public class DataBean { public DataBean() { item = ""; liquidAssets = null; fundInvestment = null; fixedAssets = null; intangibleAsset = null; otherAssets = null; currentLiabilities = null; longTermLiabilities = null; otherLiabilities = null; capitalStock = null; capitalSurplus = null; retainedEarnings = null; otherEquity = null; treasuryStock = null; } public String getItem() { return item; } public void setItem(String item) { this.item = item; } public Double getLiquidAssets() { return liquidAssets; } public void setLiquidAssets(Double liquidAssets) { this.liquidAssets = liquidAssets; } public Double getFundInvestment() { return fundInvestment; } public void setFundInvestment(Double fundInvestment) { this.fundInvestment = fundInvestment; } public Double getFixedAssets() { return fixedAssets; } public void setFixedAssets(Double fixedAssets) { this.fixedAssets = fixedAssets; } public Double getIntangibleAsset() { return intangibleAsset; } public void setIntangibleAsset(Double intangibleAsset) { this.intangibleAsset = intangibleAsset; } public Double getOtherAssets() { return otherAssets; } public void setOtherAssets(Double otherAssets) { this.otherAssets = otherAssets; } public Double getCurrentLiabilities() { return currentLiabilities; } public void setCurrentLiabilities(Double currentLiabilities) { this.currentLiabilities = currentLiabilities; } public Double getLongTermLiabilities() { return longTermLiabilities; } public void setLongTermLiabilities(Double longTermLiabilities) { this.longTermLiabilities = longTermLiabilities; } public Double getOtherLiabilities() { return otherLiabilities; } public void setOtherLiabilities(Double otherLiabilities) { this.otherLiabilities = otherLiabilities; } public Double getCapitalStock() { return capitalStock; } public void setCapitalStock(Double capitalStock) { this.capitalStock = capitalStock; } public Double getCapitalSurplus() { return capitalSurplus; } public void setCapitalSurplus(Double capitalSurplus) { this.capitalSurplus = capitalSurplus; } public Double getRetainedEarnings() { return retainedEarnings; } public void setRetainedEarnings(Double retainedEarnings) { this.retainedEarnings = retainedEarnings; } public Double getOtherEquity() { return otherEquity; } public void setOtherEquity(Double otherEquity) { this.otherEquity = otherEquity; } public Double getTreasuryStock() { return treasuryStock; } public void setTreasuryStock(Double treasuryStock) { this.treasuryStock = treasuryStock; } private String item; private Double liquidAssets; private Double fundInvestment; private Double fixedAssets; private Double intangibleAsset; private Double otherAssets; private Double currentLiabilities; private Double longTermLiabilities; private Double otherLiabilities; private Double capitalStock; private Double capitalSurplus; private Double retainedEarnings; private Double otherEquity; private Double treasuryStock; } Database.java // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://kpdus.tripod.com/jad.html // Decompiler options: packimports(3) // Source File Name: Database.java package model; // Referenced classes of package model: // DataBean public class Database { public Database() { } public DataBean getDataBean() { return dataBean; } public void setDataBean(DataBean dataBean) { this.dataBean = dataBean; } public void reloadQuarter(int quarter) { if(quarter == 0) dataBean.setItem("Quarter"); else dataBean.setItem("Quarter " + quarter); if(quarter == 1) { dataBean.setLiquidAssets(new Double(146504221D)); dataBean.setFundInvestment(new Double(23181709D)); dataBean.setFixedAssets(new Double(7168392D)); dataBean.setIntangibleAsset(new Double(221426D)); dataBean.setOtherAssets(new Double(2270018D)); dataBean.setCurrentLiabilities(new Double(102515784D)); dataBean.setLongTermLiabilities(new Double(3000D)); dataBean.setOtherLiabilities(new Double(456175D)); dataBean.setCapitalStock(new Double(33630080D)); dataBean.setCapitalSurplus(new Double(7127901D)); dataBean.setRetainedEarnings(new Double(34420905D)); dataBean.setOtherEquity(new Double(1826731D)); dataBean.setTreasuryStock(new Double(-634810D)); } else if(quarter == 2) { dataBean.setLiquidAssets(new Double(160793618D)); dataBean.setFundInvestment(new Double(26019684D)); dataBean.setFixedAssets(new Double(7106496D)); dataBean.setIntangibleAsset(new Double(176485D)); dataBean.setOtherAssets(new Double(2183907D)); dataBean.setCurrentLiabilities(new Double(121447738D)); dataBean.setLongTermLiabilities(new Double(3000D)); dataBean.setOtherLiabilities(new Double(722960D)); dataBean.setCapitalStock(new Double(34752682D)); dataBean.setCapitalSurplus(new Double(7133397D)); dataBean.setRetainedEarnings(new Double(29056591D)); dataBean.setOtherEquity(new Double(3811127D)); dataBean.setTreasuryStock(new Double(-647305D)); } else if(quarter == 3) { dataBean.setLiquidAssets(new Double(187967615D)); dataBean.setFundInvestment(new Double(27159093D)); dataBean.setFixedAssets(new Double(7047513D)); dataBean.setIntangibleAsset(new Double(182348D)); dataBean.setOtherAssets(new Double(2166805D)); dataBean.setCurrentLiabilities(new Double(142212438D)); dataBean.setLongTermLiabilities(new Double(3000D)); dataBean.setOtherLiabilities(new Double(717980D)); dataBean.setCapitalStock(new Double(34752682D)); dataBean.setCapitalSurplus(new Double(7234727D)); dataBean.setRetainedEarnings(new Double(34300237D)); dataBean.setOtherEquity(new Double(4667500D)); dataBean.setTreasuryStock(new Double(634810D)); } else { dataBean.setLiquidAssets(new Double(0.0D)); dataBean.setFundInvestment(new Double(0.0D)); dataBean.setFixedAssets(new Double(0.0D)); dataBean.setIntangibleAsset(new Double(0.0D)); dataBean.setOtherAssets(new Double(0.0D)); dataBean.setCurrentLiabilities(new Double(0.0D)); dataBean.setLongTermLiabilities(new Double(0.0D)); dataBean.setOtherLiabilities(new Double(0.0D)); dataBean.setCapitalStock(new Double(0.0D)); dataBean.setCapitalSurplus(new Double(0.0D)); dataBean.setRetainedEarnings(new Double(0.0D)); dataBean.setOtherEquity(new Double(0.0D)); dataBean.setTreasuryStock(new Double(0.0D)); } } private DataBean dataBean; }