Crear nuevo componente a partir de existentes en ZK

La variedad de componentes que tiene el framework ZK es basta, aún así se pueden personalizar o crear nuevos componentes a partir de los existentes. En este caso vamos a crear “nuevos botones”, que simplemente a los botones existentes le agregaremos etiquetas por defecto y también iconos.

En un archivo zul escribiremos las definiciones, por ejemplo en el contenido del archivo nuevos_botones.zul tendremos:

<zk>
<?component name="botonagregar" extends="button" label="Agregar" image="/img/add.png" autodisable="self" ?>
<?component name="botongrabar" macroURI="/definicion_boton_grabar.zul" ?>
</zk>

Se añade la instrucción <?component , y como se puede ver, hay dos lineas, dos formas de añadir componentes, la primera se añade directamente todo el codigo en esta página, el otro botón hace referencia a otra página zul donde puede estar mas detallado en caso que el “nuevo componente” tenga varias lineas o mas componentes.

Dentro del otro archivo zul, definicion_boton_grabar.zul

<zk>
<button label="Grabar" image="/img/16x16/disk.png" autodisable="self"/>
</zk>

Luego en la página zul donde queremos usar estos componentes creados, se tiene que importar la página donde definimos inicialmente los componentes nuevos_botones.zul

<?import src="/nuevos_botones.zul" ?>

Esta instrucción va al inicio de la página. Para usar los componentes creados, solo se escriben encerrados entre <>

<botongrabar />
<botonagregar />

Dichos componentes son botones con etiqueta e imagen, se le pueden agregar atributos propios de button ya que extienden de estos, y si se quiere utilizar del lado de java, se tienen que definir como objetos Button.

Fijar el primer día de la semana a domingo en ZK

En los desarrollos de ZK que he realizado, el componente de calendario, por lo regular toma la configuración del navegador, pero muchas veces no, y uno se ve en la necesidad realizar alguna configuración para que el primer día en el calendario sea domingo. El ponerle el “locale” como atributo en la etiqueta no me ha funcionado, lo que hace es poner el primer día en domingo, pero los días no los cambia, es decir solo el titulo cambia, y con eso las fechas quedan erróneas.

Es mejor realizar la configuración al zk.xml para que afecte a toda la aplicación.

<library-property>
    <name>org.zkoss.web.preferred.firstDayOfWeek</name>
    <value>1</value><!-- domingo -->
</library-property>