书接上回,前面说了那么多,到底ZK有啥好处呢?这个就只可意会不可言传了,呵呵。
举个例子,假设有个列表须要显示,在页面中能够使用table或者是ul li来实现,table的代码以下:
<table cellspacing=
"0" cellpadding=
"0" width=
"90%" border=
"0"
class=
"table_cont">
<tbody>
<%
//判断列表是否为空
if(activeList==
null || activeList.isEmpty() || activeList.size()<1)
{
//为空,显示提示信息
out.print(
"<tr><td colspan=\"4\" style=\"width:400px;\">目前 "+strProvinceName+
" 尚未活动</td></tr>");
}
else
{
//不为空,显示列表内容
out.println(
"<tr>\n<th style=\"width:40%;\">名称</th><th style=\"width:30%;\">活动日期</th><th style=\"width:10%;\">状态</th><th style=\"width:20%;\">操做</th>\n</tr>");
Iterator<Active> iter = activeList.iterator();
Active active =
null;
while(iter.hasNext())
{
active = (Active)iter.next();
out.println(
"<tr>");
out.print(
"<td style=\"width:40%;\">"+active.getTitle()+
"</td>");
if(active.getCreateDt()!=
null)
{
out.print(
"<td style=\"width:30%;\">"+active.getCreateDt().toString().substring(0,10)+
"</td>");
}
else
{
out.print(
"<td style=\"width:10%;\"> </td>");
}
if(active.getStatus()==1)
{
out.print(
"<td>上线</td>");
}
else
if(active.getStatus()==2)
{
out.print(
"<td>下线</td>");
}
out.print(
"<td style=\"width:20%;\"><a href=\"activeUpdate.jsp?province="+province+
"&activeId="+active.getId()+
"\">修改</a> ");
out.print(
"<a href=\"activeDel.jsp?province="+province+
"&activeId="+active.getId()+
"\">删除</a></td>");
out.println(
"</tr>");
}
}
%>
</tbody>
</table>
效果图以下:
能够看出其中有一些的判断,而后还要担忧“<%”和“%>”是否匹配,“{”和“}”是否匹配等等状况。若是是ZK的话,这些没必要要的担忧就能够省去了。
页面(list.zul)代码:
<?
xml
version
="1.0"
encoding
="UTF-8"
?>
<?
page
title
="列表"
contentType
="text/html;charset=UTF-8"
?>
<
zk
>
<
window
style
="heigth:100%; border:0; text-align:center;"
id
="winList"
>
<
style
src
="../styles/global.css"
>
</
style
>
<
div
style
="padding-top:20px; vertical-align:bottom;"
>
<
label
value
="列表"
/>
<
separator
/>
</
div
>
<
div
style
="padding:0px 0px 0px 0px;text-align:center;width:80%;"
>
<
label
id
="lblTips"
visible
="false"
style
="color:#FF0000;"
/>
<
listbox
id
="blacklistList"
style
="width:100%;"
>
<
listhead
style
="text-align:center;"
>
<
listheader
label
="用户号码"
style
="width:15%;"
/>
<
listheader
label
="用户类别"
style
="width:15%;"
/>
<
listheader
label
="说明"
style
="width:35%;"
/>
<
listheader
label
="添加日期"
style
="width:15%;"
/>
<
listheader
label
="操做"
style
="width:20%;"
/>
</
listhead
>
</
listbox
>
</
div
>
<
zscript
language
="Java"
>
<![CDATA[
import com.zk.list;
list ui = new list();
ui.setWinMain(winlList);
ui.showAllBlacklist();
]]>
</
zscript
>
</
window
>
</
zk
>
逻辑处理代码(list.java):
public
void showAllBlacklist()
{
try
{
// 获得列表
BlacklistIF blacklistIf = ServiceLocator.getBlacklistIF();
List<Blacklist> blacklistList = blacklistIf.findAllBlacklist(-1);
// 判断列表是否为空
if(blacklistList.size()>0 && !blacklistList.isEmpty())
{
this.showList(blacklistList);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
private
void showList(List<Blacklist> blacklistList)
{
// 获得列表组件,用于显示群发安排列表
Listbox listbox = (Listbox)winMain.getFellow(
"blacklistList");
// 列表的行组件
Listitem listitem =
new Listitem();
// 列表的列组件
Listcell listcell =
new Listcell();
for(
int i=0;i<blacklistList.size();i++)
{
// 用户号码
listcell.setLabel(blacklistList.get(i).getMobile());
listitem.appendChild(listcell);
// 用户类别
listcell =
new Listcell();
switch(blacklistList.get(i).getType())
{
case 1:
listcell.setLabel(
"黑名单");
break;
case 2:
listcell.setLabel(
"黄名单");
break;
case 3:
listcell.setLabel(
"绿名单");
break;
case 4:
listcell.setLabel(
"非彩信用户");
break;
}
listitem.appendChild(listcell);
// 说明
listcell =
new Listcell();
if(blacklistList.get(i).getDescription().equals(""))
{
listcell.setLabel(
"暂无");
}
else
{
listcell.setLabel(blacklistList.get(i).getDescription());
}
listitem.appendChild(listcell);
// 添加日期
listcell =
new Listcell();
listcell.setLabel(blacklistList.get(i).getCreateDate().toString().substring(0,10));
listitem.appendChild(listcell);
// 显示操做按钮
Hbox hbox =
new Hbox();
// 彩信产品的id,添加事件监听时要用final修饰的变量
final
int id = Integer.parseInt(blacklistList.get(i).getId().toString().trim());
// 添加一个查看按钮
Button button =
new Button();
button.setLabel(
"查看");
// 为查看按钮添加一个
button.addEventListener(Events.ON_CLICK,
new EventListener()
{
public
void onEvent(Event arg0)
throws Exception {
showBlacklistDetail(String.valueOf(id));
}
});
button.setVisible(
false);
hbox.appendChild(button);
// 添加一个删除按钮
button =
new Button();
button.setLabel(
"删除");
// 为删除按钮添加一个
button.addEventListener(Events.ON_CLICK,
new EventListener()
{
public
void onEvent(Event arg0)
throws Exception {
delBlacklist(String.valueOf(id));
}
});
hbox.appendChild(button);
listcell =
new Listcell();
listcell.appendChild(hbox);
listitem.appendChild(listcell);
// 将当前行在列表中显示
listbox.appendChild(listitem);
listitem =
new Listitem();
listcell =
new Listcell();
}
}
效果图以下:
能够看到,这样就达到了逻辑处理和页面显示的代码分离,使得页面显示的代码更加清晰,而逻辑处理类的做用也更加明显。