`

zk框架中常见问题的解决

阅读更多

 1、打开浏览器窗口常用于超链接

/**
  * 重新打开浏览器弹出页面
  * 
  * @param url 网络地址
  * @param blank;打开类型,可以是"_blank","_self"等
  */
 public void onSendRedirect(String url, String blank) {
  Executions.getCurrent().sendRedirect(url, blank);
 }

 例子:

if(reportInfo==null){
			onSendRedirect(
					"/designer.zul","_self");	
		}else{
			Executions.getCurrent().sendRedirect(
					"/designer.zul?reporturl=" + reportInfo.getDir() + "/"
							+ reportInfo.getFileName(), "_self");
		}

  2、主窗体与弹出子窗体之间传值刷新问题

  主窗体java代码

public class ListBusinessModel extends Window implements AfterCompose {
	
	private static final long serialVersionUID = 1L;
	public void afterCompose() {
		initPage();	

	}
	
	/**
	 * 初始化问题
	 */
	public void initPage() {
		
	}

	/**
	 * 添加函数
	 */
	public void add() {
		try {
			AddBusinessModel wnd = (AddBusinessModel) Executions.createComponents(
					"/pages/systemManage/business/addBusinessModel.zul",
					ListBusinessModel.this, null);
			wnd.doModal();
		} catch (SuspendNotAllowedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 修改函数
	 */
	public void edit() {
		try {
			Treeitem item = ((Tree)getFellow("tree")).getSelectedItem();
			if(item==null||item.getParentItem()==null){
				Message.showInfo("请选择一个业务模型.");
			}else{				
				BusinessModel model = irbm.getBusiModel(item.getId());
				Map map = new HashMap();
				map.put("bmodel", model);
				map.put("dsId", item.getParentItem().getId());
				EditBusinessModel wnd = (EditBusinessModel) Executions.createComponents(
						"/pages/systemManage/business/editBusinessModel.zul",
						ListBusinessModel.this, map);
				wnd.doModal();
			}			
			
		}catch (SuspendNotAllowedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
}

 

 添加窗体代码,注意如何刷新主窗体

public class AddBusinessModel extends Window implements AfterCompose {
	
	private static final long serialVersionUID = 1L;

	/* (non-Javadoc)
	 * @see org.zkoss.zk.ui.ext.AfterCompose#afterCompose()
	 */
	public void afterCompose() {
		initPage();

	}
	/**
	 * 初始化函数
	 */
	public void initPage() {
	}
	
	/**
	 * 保存函数
	 */
	public void save() {
	//do something	
		this.refresh();
		this.detach();
	}
	/**
	 * 刷新函数
	 */
	public void refresh() {
		ListBusinessModel bmWn = (ListBusinessModel)this.getParent();
		bmWn.initPage();
	}
}

  修改窗体,观察如何传值和接受值

public class EditBusinessModel extends Window implements AfterCompose {
	
	private static final long serialVersionUID = 1L;
	//参数的获取方法
	String dsId = (String)Executions.getCurrent().getArg().get("dsId");
	BusinessModel model = (BusinessModel)Executions.getCurrent().getArg().get("bmodel");

	public void afterCompose() {
	//do something
	}
	/**
	 * 保存
	 */
	public void save() {
		//do something
		this.refresh();
		this.detach();
	}
	/**
	 * 刷新
	 */
	public void refresh() {
		ListBusinessModel bmWn = (ListBusinessModel)this.getParent();
		bmWn.initPage();
	}
}

  

3.通过设置include对象的src属性给hostAdd.zul页面传递参数。

设置要传入的参数例如:
m_includeHost
   .setSrc("/pages/hostMan/hostAdd.zul
       ?mode=wizard&hostGroupType=monitorhostgroup");
在hostAdd.zul后台类中获取参数mode例如:
String m_mode = Executions.getCurrent().getParameter("mode");

4. hostAdd.zul是通过include被加载进来的,给该页面传递一个对象

例如:
m_includeHost.setDynamicProperty("wizardObject", this);
在hostAdd.zul后台类读取传入的对象例如:
WebsiteWizardUi m_wizardObject = (WebsiteWizardUi) Executions.getCurrent()
  .getAttribute("wizardObject");

5.给弹出窗口设置参数

例如:
Map<String, String> arg = new HashMap<String, String>();
arg.put("hostGroupId", hostGroupId);
arg.put("hostGroupType", hostGroupType);
Window wnd = (Window) Executions.createComponents("/pages/hostMan/hostAdd.zul", null, arg);
wnd.doModal();
窗口弹出后读取参数需要写在渲染方法public void afterCompose() {}中例如:
hostGroupId = (String) Executions.getCurrent().getArg().get("hostGroupId");
 Window viewWin = (Window) Executions.createComponents(
     "pages/reportView.zul", IndexWin.this, argMap);
java类中
Map argMap = this.getDesktop().getExecution().getArg();

 6、局部刷新问题

Include geronimoInc = (Include) Path
				.getComponent("//mainPage/geronimoMainWnd/geronimoInc");
		String rootPath = Paths.getPagePath();
		Date time = new Date();
		geronimoInc.setSrc(rootPath
				+ "/pages/JEEService/databaseManager/databaseList.zul?"
				+ time.getTime());

 7.添加监听方法 

方法1

this.addEventListener("onOK", new EventListener() {
public void onEvent(Event e){
      matchBeforAdd();     
}});

 

方法2

使用org.zkoss.zk.ui.Component接口中的addEventListene和removeEventListener方法
来动态地添加或移除事件监听器。
如下所示,动态添加的事件监听器必须实现org.zkoss.zk.ui.event.EventListener接口。
 void init(Component comp){
  ...
  comp.addEventListener("onClick", new MyListener());
  ...
 }
 class MyListener implements org.zkoss.zk.ui.event.EventListener {
   public void onEvent(Event event) throws UiException{     
  //事件处理    
 }
} 

 8、转到另一个servlet

例如:
Executions.sendRedirect("/welcome");
在web.xml里面定义该serverlet
例如:
<servlet>
  <servlet-name>welcome</servlet-name>
    <servlet-class>
      com.cvicse.inforguard.common.context.WelcomeServlet
    </servlet-class>
   </servlet>
 <servlet-mapping>
 <servlet-name>welcome</servlet-name>
 <url-pattern>/welcome</url-pattern>
 </servlet-mapping>
com.cvicse.inforguard.common.context.WelcomeServlet类定义为:
 
/*
 * 把请求导向首页面index.zul
 */
public class WelcomeServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void service(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
 if (req != null
   && req.getSession() != null
   && req.getSession().getAttribute(AuthenticationFilter.USER_KEY) != null
   && req.getSession().getAttribute(AuthenticationFilter.USER_KEY).equals("anonymity")){
    req.getSession().removeAttribute(AuthenticationFilter.USER_KEY);   
 }
  RequestDispatcher rd = req.getRequestDispatcher("/pages/index.zul");
  rd.forward(req, res);
 }
}

9.两个并列组件间的空隙

<vbox spacing="5em">     表示两个要排列的组建之间的间隙
    <textbox width="100px"/>
   <datebox width="100px"/>
</vbox>

10.Hbox/Vbox设置内部组件占位

<hbox width="100%" widths="10%,20%,30%,40%"> widths用逗号隔开并列的各组件占的宽度
<vbox height="100%" heights="10%,20%,30%,40%"> heights用逗号隔开并排的各组件占的高度度

11.borderlayout中子组件自适应大小

<borderlayout>组件flex属性设置为"true" 则该组件下子组件可自适应大小

12.grid组件设置

grid组件可以通过设置span属性使某一个格子占多列。 如:设置span="2,1,1",grid为四列,
则此行第一格子占两列。

13.listbox组件设置高度用rows比height好

listbox用设置rows属性来设置组件的高度可以避免listbox渲染时的闪动

14.转换字符编码格式的方法

String childtype = new String(Executions.getCurrent().getParameter("type")
           .getBytes("UTF-8"), "GBK");

分享到:
评论
1 楼 lgl669 2012-05-05  
内容不错!!!!!!!!!

相关推荐

    zk 安装框架

    ZK的官方文档和社区是获取最新信息、解决技术问题的重要资源。了解文档的来源和贡献者可以帮助你更深入地理解ZK的技术细节。 总之,ZK不仅是一个强大的Ajax框架,更是一套完整的Web开发解决方案。从环境搭建到应用...

    ZK开发文档中文HTML版

    在这个"ZK开发文档中文HTML版"中,你将找到关于如何使用ZK框架进行开发的详细指南。 首先,文档会介绍ZK的基本概念,包括组件系统、事件处理和布局管理。ZK的组件库丰富,涵盖了各种常见的UI元素,如按钮、表格、树...

    zk开发手册和注意事项

    ZK框架提供了丰富的组件,如ListBox和Grid等,组件与数据的绑定是开发ZK应用时的常见需求。例如,在ListBox组件中可以绑定一个数据集合,并且利用ZK提供的方法来动态更新ListBox的内容。同样,在Grid组件中也可以...

    ZK Ajax without the Javascript Framework

    《ZK™: Ajax Without JavaScript™ Framework》这本书提出了一个创新性的解决方案——ZK框架,它能够在不依赖客户端JavaScript的情况下实现Ajax功能。 #### 二、ZK框架简介 **ZK框架**由Potix Corporation开发,...

    ZK主题扩展工具.zip

    通过扩展ZK主题,开发者可以创建独特且一致的用户体验,同时保持与ZK框架的兼容性。 "ZK主题扩展工具.zip"这个压缩包文件显然包含了用于扩展ZK主题的相关资源和工具。这可能包括CSS样式表、图片资源、JavaScript...

    ZK+Spring+Hibernate项目搭建

    **ZK框架**: ZK是一个基于组件的Java AJAX框架,专门用于构建富客户端用户界面。它简化了创建交互式Web应用的过程,无需深入学习JavaScript或浏览器兼容性问题。ZK的核心特性包括事件驱动、服务器端渲染和组件模型...

    ZK开发手册 3.06 Word版

    11. **错误处理和调试**:学习如何识别和解决ZK应用中的常见错误,以及使用ZK提供的调试工具进行问题排查。 12. **扩展与定制**:了解如何自定义组件、扩展ZK功能,以及如何编写插件来满足特定需求。 13. **最佳...

    zk开发全套资料(插件,开发手册,jar包,笔记和程序事例)

    4. **笔记**:个人笔记通常包含了开发者在学习和实践ZK过程中总结的经验和技巧,可能是解决特定问题的方法、性能优化建议或者对某些复杂概念的通俗解释。这些笔记对于初学者来说非常宝贵,能帮助他们避免常见错误,...

    ZK快速指南

    "ZK快速指南"作为一份入门级教程,旨在帮助开发者快速掌握ZK框架的核心概念、基本操作以及常见用法,从而能够迅速上手并应用到实际项目中。 ### ZK框架概述 ZK框架的核心优势在于其对组件化编程的支持。它将Web...

    zk-src-5.0.7.1(zk源码)

    《Zookeeper源码解析——基于zk-src-5.0.7.1》 Apache ZooKeeper,简称ZK,是一款开源的分布式协调服务,它为分布式应用...在实际开发中,结合源码分析可以更好地解决遇到的问题,提升系统性能,保障服务的稳定运行。

    Manual_ZKAccess3.5_ManualZK_zk_

    最后,手册通常会包含一系列示例代码和实战教程,帮助开发者快速上手并解决实际问题。这些示例涵盖了常见的应用场景,如表格操作、表单验证、图表展示等,让读者能够更好地理解和掌握ZK SDK的用法。 总的来说,...

    zk+sptingmvc+ibatis 系统

    **ZK框架** ZK是一款基于组件的Java富客户端用户界面框架,专门用于构建富互联网应用程序(RIA)。ZK通过事件驱动模型和服务器端渲染,简化了UI的开发,开发者无需处理JavaScript和浏览器兼容性问题。ZK的核心特性...

    试着用zk结合hibernaet实现分页查询

    在IT行业中,分页查询是数据库操作中常见且重要的功能,特别是在大数据量的场景下,有效地分页可以显著提升用户体验并降低服务器负载。本话题将探讨如何利用Zookeeper(zk)与Hibernate结合来实现分页查询。...

    dubbo-demo(ZK集群).zip

    在分布式服务框架中,Dubbo与Zookeeper的结合使用是非常常见的一种架构模式。本示例"**dubbo-demo(ZK集群).zip**"提供了如何在实际项目中搭建和使用Dubbo与Zookeeper集群的实例。下面我们将深入探讨这两个组件的...

    如何用Netty写一个自己的RPC框架

    常见的序列化框架包括Hessian、ProtoBuf、Thrift等。 开发一个简化的RPC框架需要进行以下步骤: - 设计远程服务接口与本地存根(Stub),使得调用远程服务就像调用本地方法一样简单。 - 实现服务的注册与发现机制...

    zk.rar 开发手册 各种格式

    7. **故障排查**:列出常见的问题和解决方案,帮助开发者诊断和修复遇到的问题。 8. **案例研究**:展示ZooKeeper在实际项目中的应用,比如Hadoop、Kafka等大数据框架如何依赖ZooKeeper进行协调。 综合来看,"zk....

    ZK Developer Guide

    ZK 是一款用于构建高性能 Web 应用程序的开源框架。它提供了一种简单而强大的方式来创建丰富的用户界面,无需编写复杂的 JavaScript 代码。该框架的核心优势在于其能够实现服务器端驱动的 UI 更新,从而减少了网络...

    ZK开发教程ZK开发教程

    通过上述知识点的详细介绍,我们可以看到ZK不仅提供了一套完整的Web应用开发解决方案,还针对常见的开发需求提供了丰富的功能和工具。对于开发者来说,理解和掌握这些基本概念和技术是进行高效开发的基础。

    Demmare_delphi_Help!_zk_accesscontrol_源码

    "可能表明这是一个针对Delphi初学者或者开发者遇到问题时寻求帮助的资源,它可能包含了解决常见问题的代码示例或解决方案。"zk accesscontrol"可能是指使用了ZK(ZK Framework)进行界面开发,并且与访问控制有关,...

Global site tag (gtag.js) - Google Analytics