For those components that have no child components e.g. Chosenbox, Selectbox, Cascader, and Searchbox, their built-in renderers will directly wrap your data into an HTML snippet. Hence if your model data contains those characters that need to be escaped like <, >, &, you must escape them. You can call ZK’s XMLs.escapeXML() or Strings.escapeJavaScript().

Implementing your own (org.zkoss.zul.ItemRenderer) can customize how a component renders data in a browser without javascript. (For the concepts about component, model, and renderer, please refer to the Model-driven Display section). Notice that ItemRenderer should return an HTML snippet that is different from org.zkoss.zul.ListitemRenderer that creates components.

Render an item with a tooltip

public class TooltipRenderer implements ItemRenderer {
    @Override
    public String render(Component owner, Object data, int index) throws Exception {
        return String.format("<span title=\"%s\" style=\"width: 100%%;display: inline-block;\">%s</span>", data, data);
    }
}

Usage

Assume we have a tree model (org.zkoss.zul.TreeModel) called district, and an instance of a custom renderer called districtRenderer, we can put them together in a ZUML document as follows:

<cascader model="${district}" itemRenderer="${districtRenderer}"/>

Specify FQCN at itemRenderer

<cascader model="${model}" itemRenderer="org.zkoss.reference.component.input.TooltipRenderer"/>