zk框架中常见问题的解决

xiaoxiao2026-08-29  39

 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");
转载请注明原文地址: https://www.6miu.com/read-5052032.html

最新回复(0)