Processing...

Suggested case list:

Using timer to refresh a grid

383guest172.69.33.12125nk0uiMay 7, 2020 7:23:47 AMlink

user model to move item to another listbox

120guest162.158.193.148d0n3krApr 2, 2020 5:28:28 AMlink

Disabled list item row passed to VM-1981

296fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:44 PMlink

Disabled list item row passed to VM-1981

295fatih123160.83.36.13025nk0uiFeb 13, 2018 4:25:16 PMlink

Disabled list item row passed to VM-1981

294fatih123160.83.36.13225nk0uiFeb 13, 2018 3:30:44 PMlink

grid sample with ListModel/RowRenderer

816guest80.82.2.1312vah9ajFeb 21, 2017 11:42:21 AMlink

grid sample with ListModel/RowRenderer

809guest175.98.113.1622vah9ajJan 26, 2017 9:19:33 AMlink

grid sample with ListModel/RowRenderer

196guest79.185.142.402vah9ajApr 26, 2014 10:53:57 PMlink

grid sample with ListModel/RowRenderer

195guest79.185.142.402vah9ajApr 26, 2014 10:53:54 PMlink

grid sample with ListModel/RowRenderer

194guest79.185.142.402vah9ajApr 26, 2014 10:53:51 PMlink

grid sample with ListModel/RowRenderer

193guest79.185.142.402vah9ajApr 26, 2014 10:53:48 PMlink

grid sample with ListModel/RowRenderer

192guest79.185.142.402vah9ajApr 26, 2014 10:53:44 PMlink

grid sample with ListModel/RowRenderer

191guest79.185.142.402vah9ajApr 26, 2014 10:53:40 PMlink

Hierarchy table without using ZK PE/EE

1aaknai151.28.135.2131s871daJul 29, 2013 11:02:46 PMlink

grid sample with ListModel/RowRenderer

128aaknai151.28.135.2132vah9ajJul 29, 2013 7:20:00 PMlink

user model to move item to another listbox

1TonyQ114.25.109.94d0n3krApr 21, 2012 10:43:27 AMlink

Using timer to refresh a grid

1TonyQ220.133.44.3725nk0uiFeb 17, 2012 3:17:34 AMlink

Fire a event from child iframe

1TonyQ220.133.44.372eupjotFeb 3, 2012 5:04:52 AMlink

Textbox input restriction sample

1TonyQ72.21.245.2431b3nlr0Dec 20, 2011 10:09:10 AMlink

Test web core taglib in ZUL

1TonyQ198.203.175.175ofqkemDec 17, 2011 3:36:08 AMlink

Latest 10 Fiddles :

constraint binding textbox

3guest172.68.151.16220peldaDec 5, 2025 5:08:19 PMlink

Another new ZK fiddle

2guest172.68.151.16320peldaDec 5, 2025 5:07:51 PMlink

Another new ZK fiddle

1guest172.68.151.16220peldaDec 5, 2025 5:07:32 PMlink

Another new ZK fiddle

1peggypeng172.71.154.99364f4neDec 5, 2025 9:24:31 AMlink

tooltip example

2guest104.22.23.13rc1ntoDec 4, 2025 2:23:45 PMlink

Another new ZK fiddle

1guest172.69.134.2277t7602Dec 4, 2025 1:40:46 PMlink

Another new ZK fiddle

1peggypeng104.22.17.1802df6e3oDec 4, 2025 8:41:29 AMlink

onClose

1peggypeng172.68.87.248j8kd8aDec 3, 2025 4:10:26 AMlink

Another new ZK fiddle

1peggypeng172.69.134.2271rm7f4eNov 26, 2025 3:31:24 AMlink

ZK-5912-Suggestion

2rebeccalai104.22.20.1442qrmiiuNov 26, 2025 2:07:15 AMlink

ConsistentIdGenerator

5guest14.162.201.2241pj6m23Oct 14, 2015 3:18:22 PMlink

resources

index.zulzul<zk> <window border="normal" title="hello" <div>It's impossible to demonstrat the effect in Fiddle, please copy the code to your project and use it.</div> </window> </zk> ConsistentIdGenerator.javajavaimport java.util.LinkedList; import java.util.concurrent.atomic.AtomicInteger; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.Desktop; import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.Page; import org.zkoss.zk.ui.ext.Scope; import org.zkoss.zk.ui.sys.IdGenerator; /** * * @author Ian Tsai (zanyking) * */ public class ConsistentIdGenerator implements IdGenerator { private static final AtomicInteger DESKTOP_ID_AINT = new AtomicInteger(); private final IdGenerator innerIdGenerator; /** * key="USE_TEST_COMP_UUID_GENERATOR", valueType=boolean */ public ConsistentIdGenerator(){ String useTesting = System.getProperty("USE_TEST_COMP_UUID_GENERATOR"); Boolean isUnderTesting = Boolean.FALSE; if(useTesting!=null){ try{ isUnderTesting = Boolean.parseBoolean(useTesting); }catch(Exception e){ //ignore, nothing need to do. } } if(isUnderTesting){ innerIdGenerator = new TestingIdGenerator(); }else{ innerIdGenerator = new ProductionIdGenerator(); } } public String nextComponentUuid(Desktop arg0, Component arg1) { return innerIdGenerator.nextComponentUuid(arg0, arg1); } public String nextDesktopId(Desktop arg0) { return innerIdGenerator.nextDesktopId(arg0); } public String nextPageUuid(Page arg0) { return innerIdGenerator.nextPageUuid(arg0); } private static final String CHAR = "0123456789abcdefghijklmnopqrstuvwxyz"; private static final char[] CHAR_ARR =CHAR.toCharArray(); private static String encodeRadix36(int in){ StringBuffer sb = new StringBuffer(4); // almost impossible for a desktop to contain more than 10,000 components. int inp = in,k,i; do{ k = inp /CHAR_ARR.length; i = inp % CHAR_ARR.length; sb.append(CHAR_ARR[i]); inp = k; } while(k>0); return sb.reverse().toString(); } private static int getAndIncrement(Scope scope, String key){ AtomicInteger aInt = (AtomicInteger) scope.getAttribute(key); if (aInt == null) { scope.setAttribute(key, aInt = new AtomicInteger()); } int i = aInt.getAndIncrement(); return i; } /** * * @author Ian Tsai(ytsai1) * */ static class ProductionIdGenerator implements IdGenerator{ private final static String ID_NUMBER = "zk_id_num"; public String nextComponentUuid(Desktop desktop, Component comp) { String key = ID_NUMBER + comp.getClass().getSimpleName(); int i = getAndIncrement(desktop, key); String compId = "zc_" + comp.getClass().getSimpleName() +"_"+ i; return compId; } public String nextDesktopId(Desktop desktop) { int i = DESKTOP_ID_AINT.getAndIncrement(); String dtid = "Desktop_" + i; ((javax.servlet.http.HttpServletResponse)Executions.getCurrent().getNativeResponse()).setHeader("Desktop", dtid); return dtid; } public String nextPageUuid(Page page) { return null; } }//end of class /** * * @author Ian Tsai(ytsai1) * */ static class TestingIdGenerator implements IdGenerator{ private static final String KEY_GENERIC_SHORT_NAME = "KEY_GENERIC_SHORT_NAME"; private final static String KEY_UUID_ATOMIC_INT = "KEY_UUID_ATOMIC_INT"; /* * (non-Javadoc) * @see org.zkoss.zk.ui.sys.IdGenerator#nextComponentUuid(org.zkoss.zk.ui.Desktop, org.zkoss.zk.ui.Component) */ public String nextComponentUuid(Desktop desktop, Component comp) { Page page = comp.getPage(); Scope scope = page==null? desktop : page; String pageUuid = page==null? "pseudo_page" : page.getUuid(); String prefix = enc(comp.getClass().getSimpleName(), enc(pageUuid, "zc_", desktop, false), desktop, false); String uuid = prefix + encodeRadix36(getAndIncrement(scope, KEY_UUID_ATOMIC_INT)); return uuid; } /* * (non-Javadoc) * @see org.zkoss.zk.ui.sys.IdGenerator#nextDesktopId(org.zkoss.zk.ui.Desktop) */ public String nextDesktopId(Desktop desktop) { int i = DESKTOP_ID_AINT.getAndIncrement(); String dtid = "Desktop_" + i; ((javax.servlet.http.HttpServletResponse)Executions.getCurrent().getNativeResponse()).setHeader("Desktop", dtid); return dtid; } /* * (non-Javadoc) * @see org.zkoss.zk.ui.sys.IdGenerator#nextPageUuid(org.zkoss.zk.ui.Page) */ public String nextPageUuid(Page page) { return null; } /** * * @param name * @param prefix * @param scope * @return */ private static String enc(String name, String prefix, Scope scope, boolean disable){ if(disable){ return prefix+name+"_"; } StatefulIdEncoder idEncoder = (StatefulIdEncoder) scope.getAttribute(KEY_GENERIC_SHORT_NAME); if (idEncoder == null) { scope.setAttribute(KEY_GENERIC_SHORT_NAME, idEncoder = new StatefulIdEncoder()); } return prefix+idEncoder.encode(name)+"_"; } /** * @author ytsai1 */ private static class StatefulIdEncoder{ final LinkedList<String> store = new LinkedList<String>(); /** * @param name * @return */ public String encode(String name){ if(name==null || name.isEmpty()) throw new IllegalArgumentException("StatefulIdEncoder can't encode a null or empty String: "+name); int counter = 0; int idx = -1; for(String temp : store){ if(temp.equals(name)){ idx = counter; break; } counter++; } if(idx<0){//if not exist store.add(name); return encodeRadix36(counter); }else{// it's exist return encodeRadix36(idx); } } } }//end of class... }