<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>解惑 &#187; ZK</title>
	<atom:link href="http://www.jiehoo.me/category/zk/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jiehoo.me</link>
	<description>解己之惑，解人之惑</description>
	<lastBuildDate>Thu, 02 Sep 2010 03:29:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>GAE+ ZK没有那么成熟</title>
		<link>http://www.jiehoo.me/zk-plus-gae-is-not-full-fledged.htm</link>
		<comments>http://www.jiehoo.me/zk-plus-gae-is-not-full-fledged.htm#comments</comments>
		<pubDate>Sat, 01 Aug 2009 07:33:46 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[ZK]]></category>
		<category><![CDATA[问题]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[window]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/zk-plus-gwt-is-not-full-fledged.htm</guid>
		<description><![CDATA[开始的感觉都还不错，把原来为公司做POC的一个项目拷贝过来修改修改就可以跑了，在本地基本可以用，但是有些问题： 添加修改数据的窗口不能用Modal窗口，错误消息是：Event processing thread is disabled（这个是因为ZK+GAE本来就需要把事件线程disable掉，因为GAE里面不能开线程） 把Modal窗口修改成Popup窗口，本地是好的，但是上传到GWT没有反应也没有报错。]]></description>
			<content:encoded><![CDATA[<p class='fp'>开始的感觉都还不错，把原来为公司做POC的一个项目拷贝过来修改修改就可以跑了，在本地基本可以用，但是有些问题：</p>
<ul>
<li>添加修改数据的窗口不能用Modal窗口，错误消息是：Event processing thread is disabled（这个是因为ZK+GAE本来就需要把事件线程disable掉，因为GAE里面不能开线程）</li>
<li>把Modal窗口修改成Popup窗口，本地是好的，但是上传到GWT没有反应也没有报错。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/zk-plus-gae-is-not-full-fledged.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>经验也会帮倒忙</title>
		<link>http://www.jiehoo.me/%e7%bb%8f%e9%aa%8c%e4%b9%9f%e4%bc%9a%e5%b8%ae%e5%80%92%e5%bf%99.htm</link>
		<comments>http://www.jiehoo.me/%e7%bb%8f%e9%aa%8c%e4%b9%9f%e4%bc%9a%e5%b8%ae%e5%80%92%e5%bf%99.htm#comments</comments>
		<pubDate>Thu, 30 Jul 2009 09:27:24 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[ZK]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[i18n]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e7%bb%8f%e9%aa%8c%e4%b9%9f%e4%bc%9a%e5%b8%ae%e5%80%92%e5%bf%99.htm</guid>
		<description><![CDATA[本来打算那个Notes-all用Google的全套解决方案的，就是用GWT + Google App Engine，看了下GWT的Sample，发现还是比较麻烦，但是感觉思路和ZK还是很像的，就打算比较下GWT和ZK，结果发现有人说可以把ZK成功发布到Google App Engine，试了下，果然是可以的，有兴趣的可以试试（在ZK网站可以下载zk-gae的sample，基于这个很容易建立自己的工程）。 基于我玩过一段时间的ZK，当然用ZK更方便了。 今天把原来的东西复制过去了，在做国际化的时候，用Eclipse编辑properties文件，里面有中文，不能保存，只能保存ISO-8859-1编码的内容。后来想着应该装个插件，下载了，好使，但是运行起来发现并没有把转码的内容显示为正确的中文，很奇怪。后来怀疑ZK读取properties文件的时候和Java读取国际化文件不一样，把properties文件的编码修改为UTF-8，然后直接用文本编辑器输入中文内容，运行测试，正常！ 这个就是一般的国际化处理的经验造成的问题。 最后说一下，对ZK的这个违反Java惯例的方式赞一下，因为我一直对Java的这个需要把properties国际化文件用native2ascii转换的过程很鄙视，不知道谁这么设计的。ZK是以UTF-8读取properties文件的，不做任何转换。 更新： 可以修改Eclipse，让它对properties文件不强制使用ISO-8859-1编码保存： eclipse &#8211;&#62; window &#8211;&#62; Preferences &#8211;&#62; General &#8211;&#62; Content Types &#8211;&#62; Text &#8211;&#62; 单击 Java Properties File,把底部的Default edcodng从ISO-8859-1改成utf-8，然后update。]]></description>
			<content:encoded><![CDATA[<p class='fp'>本来打算那个Notes-all用Google的全套解决方案的，就是用GWT + Google App Engine，看了下GWT的Sample，发现还是比较麻烦，但是感觉思路和ZK还是很像的，就打算比较下GWT和ZK，结果发现有人说可以把ZK成功发布到Google App Engine，试了下，果然是可以的，<a href="http://app.notes-all.com/">有兴趣的可以试试</a>（在ZK网站可以下载zk-gae的sample，基于这个很容易建立自己的工程）。<br />
基于我玩过一段时间的ZK，当然用ZK更方便了。<br />
今天把原来的东西复制过去了，在做国际化的时候，用Eclipse编辑properties文件，里面有中文，不能保存，只能保存ISO-8859-1编码的内容。后来想着应该装个插件，下载了，好使，但是运行起来发现并没有把转码的内容显示为正确的中文，很奇怪。后来怀疑ZK读取properties文件的时候和Java读取国际化文件不一样，把properties文件的编码修改为UTF-8，然后直接用文本编辑器输入中文内容，运行测试，正常！<br />
这个就是一般的国际化处理的经验造成的问题。<br />
最后说一下，对ZK的这个违反Java惯例的方式赞一下，因为我一直对Java的这个需要把properties国际化文件用native2ascii转换的过程很鄙视，不知道谁这么设计的。ZK是以UTF-8读取properties文件的，不做任何转换。</p>
<p>更新：<br />
可以修改Eclipse，让它对properties文件不强制使用ISO-8859-1编码保存：<br />
<font color="#0000ff">eclipse &#8211;&gt; window &#8211;&gt; Preferences &#8211;&gt; General &#8211;&gt; Content Types &#8211;&gt; Text &#8211;&gt; 单击 Java Properties File,把底部的Default edcodng从ISO-8859-1改成utf-8</font>，然后update。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e7%bb%8f%e9%aa%8c%e4%b9%9f%e4%bc%9a%e5%b8%ae%e5%80%92%e5%bf%99.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ZK国际化的原型</title>
		<link>http://www.jiehoo.me/zk%e5%9b%bd%e9%99%85%e5%8c%96%e7%9a%84%e5%8e%9f%e5%9e%8b.htm</link>
		<comments>http://www.jiehoo.me/zk%e5%9b%bd%e9%99%85%e5%8c%96%e7%9a%84%e5%8e%9f%e5%9e%8b.htm#comments</comments>
		<pubDate>Thu, 21 May 2009 03:54:13 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[ZK]]></category>
		<category><![CDATA[原型]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[prototype]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/zk%e5%9b%bd%e9%99%85%e5%8c%96%e7%9a%84%e5%8e%9f%e5%9e%8b.htm</guid>
		<description><![CDATA[昨天说了ZK的国际化做得不够好，今天稍微试了下，发现昨天提到的方案是可行的，创建一个Initiator，自动的把文本替换为国际化的内容： &#60;?init class=&#34;xxx.I18nBinderInit&#34;?&#62; &#60;toolbarbutton label=&#34;button.add&#34; image=&#34;../images/add.png&#34; onClick=&#34;userListWindow.onAdd()&#34;/&#62; 这个只是原型，现在可能还不能处理所有的组件类型，可以简单的修改下变成通用的解决方案： 增加一个Property文件，里面添加需要处理的组件类型以及需要处理的属性，然后读取这个配置，如果谁觉得不够可以在classpath中放置一个同名的配置文件进行定制。 源代码： import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.util.Initiator; import org.zkoss.zul.api.Window; import org.zkoss.zul.api.Label; import org.zkoss.zul.impl.api.LabelElement; import org.zkoss.util.resource.Labels; import java.util.Collection; public class I18nBinderInit implements Initiator { &#160;&#160;&#160; public void doInit(Page page, Object[] objects) throws Exception &#160;&#160;&#160; { &#160;&#160;&#160; } &#160;&#160;&#160; public void doAfterCompose(Page page) throws Exception &#160;&#160;&#160; { &#160;&#160;&#160;&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>昨天说了<a href="http://www.jiehoo.com/zk%e7%9a%84%e5%9b%bd%e9%99%85%e5%8c%96%e4%b8%8d%e5%a4%9f%e5%a5%bd.htm">ZK的国际化做得不够好</a>，今天稍微试了下，发现昨天提到的方案是可行的，创建一个Initiator，自动的把文本替换为国际化的内容：<br />
&lt;?init class=&quot;xxx.I18nBinderInit&quot;?&gt;<br />
&lt;toolbarbutton label=&quot;button.add&quot; image=&quot;../images/add.png&quot; onClick=&quot;userListWindow.onAdd()&quot;/&gt;</p>
<p>这个只是原型，现在可能还不能处理所有的组件类型，可以简单的修改下变成通用的解决方案：<br />
增加一个Property文件，里面添加需要处理的组件类型以及需要处理的属性，然后读取这个配置，如果谁觉得不够可以在classpath中放置一个同名的配置文件进行定制。<br />
源代码：</p>
<p><span id="more-715"></span> import org.zkoss.zk.ui.Component;<br />
import org.zkoss.zk.ui.Page;<br />
import org.zkoss.zk.ui.util.Initiator;<br />
import org.zkoss.zul.api.Window;<br />
import org.zkoss.zul.api.Label;<br />
import org.zkoss.zul.impl.api.LabelElement;<br />
import org.zkoss.util.resource.Labels;</p>
<p>import java.util.Collection;</p>
<p>public class I18nBinderInit implements Initiator<br />
{<br />
&nbsp;&nbsp;&nbsp; public void doInit(Page page, Object[] objects) throws Exception<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void doAfterCompose(Page page) throws Exception<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; changeComponent(page);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private String getLabel(String key)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Labels.getLabel(key,key);<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private void applyComponent(Object component)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (component instanceof LabelElement)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LabelElement label=(LabelElement) component;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.setLabel(getLabel(label.getLabel()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (component instanceof Window)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Window window=(Window)component;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.setTitle(getLabel(window.getTitle()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (component instanceof Page)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Page page=(Page)component;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page.setTitle(getLabel(page.getTitle()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else if (component instanceof Label)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label label=(Label)component;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.setValue(getLabel(label.getValue()));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; private void changeComponent(Object component)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; applyComponent(component);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Collection&lt;Component&gt; children;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (component instanceof Page)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; children = ((Page) component).getRoots();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; children = ((Component) component).getChildren();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (Component child : children)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; changeComponent(child);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public boolean doCatch(Throwable throwable) throws Exception<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; public void doFinally() throws Exception<br />
&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp; }<br />
}</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/zk%e5%9b%bd%e9%99%85%e5%8c%96%e7%9a%84%e5%8e%9f%e5%9e%8b.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zk的国际化不够好</title>
		<link>http://www.jiehoo.me/zk%e7%9a%84%e5%9b%bd%e9%99%85%e5%8c%96%e4%b8%8d%e5%a4%9f%e5%a5%bd.htm</link>
		<comments>http://www.jiehoo.me/zk%e7%9a%84%e5%9b%bd%e9%99%85%e5%8c%96%e4%b8%8d%e5%a4%9f%e5%a5%bd.htm#comments</comments>
		<pubDate>Wed, 20 May 2009 07:31:00 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[ZK]]></category>
		<category><![CDATA[问题]]></category>
		<category><![CDATA[i18n]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/zk%e7%9a%84%e5%9b%bd%e9%99%85%e5%8c%96%e4%b8%8d%e5%a4%9f%e5%a5%bd.htm</guid>
		<description><![CDATA[官方文档中说国际化很简单，资源文件放在WEB-INF下，文件名固定，都是i3-label.properties，简体中文的就是i3-label_zh_CN.properties。 按照官方文档说的，修改Locale就是： session.setAttribute(Attributes.PREFERRED_LOCALE,xxxLocale) 但是根本不好使，后来搜索了下，发现需要设置： Locales.setThreadLocal(xxxLocale) 另外一个问题是页面的刷新是个问题，如果不考虑用户已有的操作，假设用户进入首页没有做什么事情，首先改变Locale，那么刷新比较简单： Executions.getCurrent().sendRedirect(&#8220;&#8221;) 国际化在页面中使用也比较丑陋，先是： &#60;?taglib uri=&#34;http://www.zkoss.org/dsp/web/core&#34; prefix=&#34;c&#34; ?&#62; &#8230; &#60;toolbarbutton label=&#34;${c:l(&#8216;button.add&#8217;)}&#34; image=&#34;../images/add.png&#34; onClick=&#34;userListWindow.onAdd()&#34;/&#62; 比较理想的应该是像数据绑定一样，能够声明某个东西，然后Label的内容都从资源文件取： &#60;?init class=&#34;xxx.I18nBinderInit&#34;?&#62; &#60;toolbarbutton label=&#34;button.add&#34; image=&#34;../images/add.png&#34; onClick=&#34;userListWindow.onAdd()&#34;/&#62; 当然，这个功能可能自己也可以自己实现，有时间我会试试。 最后说的一点就是zk的默认中文是繁体中文，比较难受。]]></description>
			<content:encoded><![CDATA[<p class='fp'>官方文档中说国际化很简单，资源文件放在WEB-INF下，文件名固定，都是i3-label.properties，简体中文的就是i3-label_zh_CN.properties。<br />
按照官方文档说的，修改Locale就是：<br />
session.setAttribute(Attributes.PREFERRED_LOCALE,xxxLocale)<br />
但是根本不好使，后来搜索了下，发现需要设置：<br />
Locales.setThreadLocal(xxxLocale)</p>
<p>另外一个问题是页面的刷新是个问题，如果不考虑用户已有的操作，假设用户进入首页没有做什么事情，首先改变Locale，那么刷新比较简单：<br />
Executions.getCurrent().sendRedirect(&ldquo;&rdquo;)</p>
<p>国际化在页面中使用也比较丑陋，先是：<br />
&lt;?taglib uri=&quot;http://www.zkoss.org/dsp/web/core&quot; prefix=&quot;c&quot; ?&gt;<br />
&#8230;<br />
&lt;toolbarbutton label=&quot;${c:l(&#8216;button.add&#8217;)}&quot; image=&quot;../images/add.png&quot; onClick=&quot;userListWindow.onAdd()&quot;/&gt;<br />
比较理想的应该是像数据绑定一样，能够声明某个东西，然后Label的内容都从资源文件取：<br />
&lt;?init class=&quot;xxx.I18nBinderInit&quot;?&gt;<br />
&lt;toolbarbutton label=&quot;button.add&quot; image=&quot;../images/add.png&quot; onClick=&quot;userListWindow.onAdd()&quot;/&gt;</p>
<p>当然，这个功能可能自己也可以自己实现，有时间我会试试。</p>
<p>最后说的一点就是zk的默认中文是繁体中文，比较难受。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/zk%e7%9a%84%e5%9b%bd%e9%99%85%e5%8c%96%e4%b8%8d%e5%a4%9f%e5%a5%bd.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>createComponents的问题</title>
		<link>http://www.jiehoo.me/createcomponents%e7%9a%84%e9%97%ae%e9%a2%98.htm</link>
		<comments>http://www.jiehoo.me/createcomponents%e7%9a%84%e9%97%ae%e9%a2%98.htm#comments</comments>
		<pubDate>Tue, 12 May 2009 04:39:22 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[ZK]]></category>
		<category><![CDATA[图片]]></category>
		<category><![CDATA[路径]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/createcomponents%e7%9a%84%e9%97%ae%e9%a2%98.htm</guid>
		<description><![CDATA[ZK很好的一个功能就是打开一个zul文件把组件添加到页面上： Executions.createComponents(&#8220;yyy/xxx.zul&#8221;, null, params) 但是用这种方式打开的页面有一个奇怪的问题，和直接加载的不同，直接加载的的那些image是写相对路径的，例如： &#60;toolbarbutton label=&#34;Add&#34; image=&#34;../images/add.png&#34;/&#62; 如果是用createComponents打开，这个方式不好使，找不到图片，显示一个红叉叉，需要修改成： &#60;toolbarbutton image=&#34;images/add.png&#34;/&#62;]]></description>
			<content:encoded><![CDATA[<p class='fp'>ZK很好的一个功能就是打开一个zul文件把组件添加到页面上：<br />
Executions.createComponents(&ldquo;yyy/xxx.zul&rdquo;, null, params)<br />
但是用这种方式打开的页面有一个奇怪的问题，和直接加载的不同，直接加载的的那些image是写相对路径的，例如：<br />
&lt;toolbarbutton label=&quot;Add&quot; image=&quot;../images/add.png&quot;/&gt;<br />
如果是用createComponents打开，这个方式不好使，找不到图片，显示一个红叉叉，需要修改成：<br />
&lt;toolbarbutton image=&quot;images/add.png&quot;/&gt;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/createcomponents%e7%9a%84%e9%97%ae%e9%a2%98.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>服务器端的分页功能</title>
		<link>http://www.jiehoo.me/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%af%e7%9a%84%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.htm</link>
		<comments>http://www.jiehoo.me/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%af%e7%9a%84%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.htm#comments</comments>
		<pubDate>Mon, 11 May 2009 03:01:18 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[ZK]]></category>
		<category><![CDATA[分页]]></category>
		<category><![CDATA[服务器]]></category>

		<guid isPermaLink="false">http://www.jiehoo.com/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%af%e7%9a%84%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.htm</guid>
		<description><![CDATA[ZK的分页功能默认是在客户端做的，也就是服务器端返回所有的结果，然后客户端每次显示一页的数据，翻页的时候不提交请求到服务器端重新查询。如果服务器端返回的结果比较多，这种方案就不太好了，要实现服务器端的分页也很简单，在使用Listbox或者grid的时候不要使用mold=&#34;paging&#34;，而是添加一个Paging组件： &#60;paging id=&#34;groupListboxPaging&#34; pageSize=&#34;10&#34;/&#62; 然后给Paging增加事件监听： &#160;&#160;&#160;&#160;&#160;&#160;&#160; final Paging paging = getPaging(pagingName); &#160;&#160;&#160;&#160;&#160;&#160;&#160; paging.addEventListener( &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#34;onPaging&#34;, new EventListener() &#160;&#160;&#160;&#160;&#160;&#160;&#160; { &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public void onEvent(Event event) &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; { &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; PagingEvent pagingEvent = (PagingEvent) event; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int pageNumber = pagingEvent.getActivePage(); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int firstRow = pageNumber * paging.getPageSize(); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; queryInfos.get(listName).getPageInfo().setFirstRow(firstRow); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; refreshList(listName); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; } &#160;&#160;&#160;&#160;&#160;&#160;&#160; }); 代码中的getPaging和refreshList都是我自定义的方法，getPaging很简单，因为我的这个代码是在自定义的Window类里面的，所以： &#160;&#160;&#160; protected [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>ZK的分页功能默认是在客户端做的，也就是服务器端返回所有的结果，然后客户端每次显示一页的数据，翻页的时候不提交请求到服务器端重新查询。如果服务器端返回的结果比较多，这种方案就不太好了，要实现服务器端的分页也很简单，在使用Listbox或者grid的时候不要使用mold=&quot;paging&quot;，而是添加一个Paging组件：<br />
&lt;paging id=&quot;groupListboxPaging&quot; pageSize=&quot;10&quot;/&gt;<br />
然后给Paging增加事件监听：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final Paging paging = getPaging(pagingName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; paging.addEventListener(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;onPaging&quot;, new EventListener()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void onEvent(Event event)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PagingEvent pagingEvent = (PagingEvent) event;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int pageNumber = pagingEvent.getActivePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int firstRow = pageNumber * paging.getPageSize();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; queryInfos.get(listName).getPageInfo().setFirstRow(firstRow);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; refreshList(listName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
代码中的getPaging和refreshList都是我自定义的方法，getPaging很简单，因为我的这个代码是在自定义的Window类里面的，所以：<br />
&nbsp;&nbsp;&nbsp; protected Paging getPaging(String pagingName)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (Paging) getFellow(pagingName);<br />
&nbsp;&nbsp;&nbsp; }<br />
而refreshList就比较复杂一些了，根据传入的list的名字查询结果并刷新list：<br />
&nbsp;&nbsp;&nbsp; public void refreshList(String name)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getListbox(getListboxName(name)).setModel(new BindingListModelList(list(name), false));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Throwable t)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; handleException(t);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
核心就是拿到Listbox或者Grid然后setModel。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jiehoo.me/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%af%e7%9a%84%e5%88%86%e9%a1%b5%e5%8a%9f%e8%83%bd.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
