ZK Ajax Web framework

Estava dando uma olhada nos pacotes de licensa comercial do ZK e me deparei com algumas dúvidas.

Existem três tipos de pacotes comerciais Standard, Professional e Enterprise.

No Enterprise tem um tal de Enterprise Functions:
ZK Cascading Style, Resumable Download…

O que seria esse ZK Cascading Style?

Se eu adquirir o pacote Professional posso mudar o CSS dos componentes?

Mandei um email pra eles, mas até agora nada de resposta.

Olá fantomas,

Estou usando o ZK em um projeto interno desde a versão 2.4. Migrei há pouco para a versão 3.5 que tem muitas novas funcionalidades. Vindo do desenvolvimento desktop - delphi, swing - sempre utilizei frameworks web baseados em componentes e que também pudessem ser programados diretamente por classes java, como o ZK e o Click. No caso do ZK, a produtividade me chamou atenção, e pricipalmente a possibilidade de utilizar ajax programando em java e não em javascript. Para o desenvolvimento uso apenas o Eclipse mesmo, em sua versão mais ‘leve’, embora haja um excelente plugin do ZK para o Netbeans. No site do ZK tem um tutorial sobre como programar o Eclipse para usufruir de sintaxe highlight e code completion ao editar as páginas ‘.zul’. Como apenas a parte lógica do meu projeto é compilada, faço edições em runtime no design das páginas apartir de uma tela de manutenção do próprio sistema utilizando isso aqui, sem a necessidade de restart do container ou mesmo reload do context.

Sobre JSF, nunca utilizei, não posso falar muito. Mas pelo que notei parece complicado.
[]'s.

Fala pessoal.

Eu comecei a mexer com esse framework mas acabei desistindo, já que nunca conseguia muito material sobre ele, exceto no seu próprio site, que tem muitos bons exemplos.

A idéia de montarmos uma lista de discussão seria ideal! :smiley:

Agora uma perguntinha, alguém sabe alguma técnica pra controle de acesso usando o ZK?
Porque tipo, usando o JSF eu uso o PhaseListener, pra gerenciar o ciclo de vida do JSF, no ZK tem algo parecido?

Valeu pela resposta genildof

Então…para controlar acessos é indicado utilizar o ACEGI: http://www.zkoss.org/smalltalks/zkacegi/zkacegi.dsp

flws

Valeu kra vou dar uma olhada…
Agora pessoal, uma opinião pessoal…

Este framework está no mercado há alguns anos, é muito poderoso, facilita em muito o desenvolvimento, mas pq será que não vingou?
Digo, quase não se é falado sobre ele, há poucos materiais na internet… Será que tem chances dele ser um framework bem aceito pela comunidade?
É bem pessoal essa opinião, na verdade posso estar enganado, me corrijam por favor :smiley:

Aproveitando aqui… :smiley:
Alguém sabe se o ZK tem suporte a internacionalização??? Se tiver podem me passar alguma referência?? :smiley:

Cara estou usando o ZK num projeto e estou achando bastante interessante e fácil de integrar com o Java

Já trabalhei com o ExtJs, mas o ZK é bem mais fácil, porque, você não precisa programar em Javascript nele apesar dele te dar essa opção também.

Com relação a internacionalização dá pra mudar sim, você configura no zk.xml.

Baixe essa documentação:

http://prdownloads.sourceforge.net/zk1/zk-devref-3.5.1.zip?download

Espero ter ajudado!

abraços!

Acredito que os problemas com performance, somente resolvidos apartir da release 3.0 no ano passado, contribuiram para esta ‘impopularidade’. Mas isso mudou muito desde então, penso que ainda pode vingar .
Também é minha humilde opnião :mrgreen:.

A propósito, a futura release do ZK Studio vai ter um editor WYSIWYG.

Dá uma olhada neste link também: http://www.zkoss.org/smalltalks/i18n/i18n.dsp

[quote=felipempantoja]
Este framework está no mercado há alguns anos, é muito poderoso, facilita em muito o desenvolvimento, mas pq será que não vingou?
Digo, quase não se é falado sobre ele, há poucos materiais na internet… Será que tem chances dele ser um framework bem aceito pela comunidade?
É bem pessoal essa opinião, na verdade posso estar enganado, me corrijam por favor[/quote]

Não diria que não vingou…acho que abocanhou uma boa fatia do mercado e parece que vai aumentar ainda mais sua utilização. Na minha opinião o que pegou e o que ainda deve estar pegando é a questão da licença e algumas coisas relacionadas a paradigmas. frameworks semelhantes ao struts ainda são bastante utilizados, e frameworks orientados a eventos estão começando a aparecer e ganhar força “recentemente” vamos dizer assim, principalmente com o advento do JSF e Ajax. Muito provavelmente os frameworks do tipo JSF vão brevemente incorporar as idéias que existem no ZK na intenção de atingir mais flexibilidade e agilidade.

[]'s

genildof,
muito maneiro esse futuro editor hein… show de bola!

fantomas,
Eu sempre tive receio de estudar esse framework com medo justamente “não vingar”, mas como vc falou, acho que uns dos maiores problemas é a questão da licença, mas com certeza o framework cumpre com o que promete no que diz respeito a produtividade, é sensacional!
Espero realmente que dê certo, ou como vc falou, que outros frameworks mais conhecidos como JSF incorporem as idéias do ZK.

Pessoal, valeu pelo esclarecimento aí.
Abração a todos :smiley:

Estou usando esse framework em um projeto freelancer e não me preocupo muito com essa história de vingar ou não porque é importante você conhecer outros frameworks do mercado também.

Quero levar a idéia de abrirmos um grupo de discussão exclusivo para esse framework, para podermos centrar mais as informações.

Estou desenvolvendo uma página e depois vou postar os fontes dela aqui para vocês darem uma olhada e ver se ficou legal.

Valeu!!!

Estou tendo um problema no zk, no qual eu não consigo usar a anotação de model do databinding em um componente que não seja do tipo listbox. Isso é muito ruim. Tentei usar em um radiogroup ou em um <h:ul> e tive o mesmo erro.

Alguém sabe se dá para usar databind nesses componentes também?

Se não der, qual seria a melhor alternativa para eu montar uma lista dentro de outra lista?

.zul

<?page id="testZul" title=" New ZUL Title" cacheable="false" 
	language="xul/html" zscriptLanguage="Java" contentType="text/html;charset=UTF-8"?>
<?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?>


<zk xmlns="http://www.zkoss.org/2005/zul"
	xmlns:h="http://www.w3.org/1999/xhtml"
	xmlns:a="http://www.zkoss.org/2005/zk/annotation"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd">
<window id="winProdutora" border="none" use="action.ProdutoraCadastro">

	<tabbox>
		<tabs>
			<tab label="Dados Gerais" />
			<tab label="Contato" />
		</tabs>
		<tabpanels>
			<tabpanel>
				<groupbox mold="3d">
					<caption label="Editora/Gravadora"  />
					<grid>
						<columns>
							<column width="15%" />
							<column width="85%" />
						</columns>
						<rows>
							<row>

								<label value="Tipo: " />
											
								<a:bind model="winProdutora.listTipoProdutora" selectedItem="winProdutora.produtora.tipo" />
								<listbox rows="1" mold="select" id="produtoraTipo">
									<listhead />
									<a:bind _var="tipoProdutora" label="tipoProdutora"/>
									<listitem />
								</listbox>	
									
							</row>
							<row>
								<label value="Nome: "  />
								<a:bind value="winProdutora.produtora.nome" />
								<textbox />
							</row>
							<row>
								<label value="Site: " />
								<a:bind value="winProdutora.produtora.site" />
								<textbox id="site" />
							</row>
						</rows>
					</grid>
				</groupbox>
				
				<h:br />
				
				<groupbox mold="3d">
						<caption label="Telefone:"  />

						<grid>
							<columns>
								<column width="5%" />
								<column width="5%" />
								<column width="5%" />
								<column width="85%" />
							</columns>
							<rows>
								<row spans="1,3">
									<label value="Ramal: " />
									<a:bind value="winProdutora.empresaTelefone.Ramal" />
									<textbox cols="3" maxlength="3"  />
								</row>
								<row>
									<label value="DDI: " />
									<a:bind value="winProdutora.empresaTelefone.DDI" />
									<textbox cols="3" maxlength="3" constraint="no empty" />
									
									<label value="DDD: " />
									<a:bind value="winProdutora.empresaTelefone.DDD" />
									<textbox cols="3" maxlength="3"  constraint="no empty"  />
	
								</row>
								<row>
									<label value="Telefone: " />
									<a:bind value="winProdutora.empresaTelefone.Telefone" />
									<textbox constraint="no empty" />
									<label value="Tipo: " />
									
									<a:bind model="winProdutora.listTipoTelefone" selectedItem="winProdutora.empresaTelefone.Tipo" />
									<listbox rows="1" mold="select" id="empresaTelefoneTipo">
										<listhead />
										<a:bind _var="tipoEmpresaTelefone" label="tipoEmpresaTelefone"/>
										<listitem />
									</listbox>	
									 
								</row>
							</rows>
						</grid>
						<h:br />
						<button label="Adicionar" forward="onClick=onAdicionarEmpresaTelefone" />
						<separator bar="true" />
						
						<h:br />
						
						<a:bind model="winProdutora.produtora.telefones" selectedItem="winProdutora.empresaTelefoneSelecionado"/>							
						<listbox width="100%" id="empresaTelefoneAdicionadoListbox" >
							<listhead sizable="true">
								<listheader label="Ramal" />
								<listheader label="DDI" />
								<listheader label="DDD" />
								<listheader label="Telefone"/>
								<listheader label="Tipo" />
							</listhead>		
							<a:bind _var="thisTelefoneEmpresa"/>
							<listitem>
								<a:bind label="thisTelefoneEmpresa.Ramal"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.DDI"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.DDD"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.Telefone"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.Tipo"/>
								<listcell />
							</listitem>	
						</listbox>
					
					</groupbox>
								
				<h:br />
			
				<groupbox mold="3d">
					<caption label="Endereço:"  />
					<grid>
						<columns>
							<column width="20%" />
							<column width="20%" />
							<column width="20%" />
							<column width="40%" />
						</columns>
						<rows>
							<row spans="1,3">
								<label value="CEP: " />
								<hbox>
									<textbox />
									<space />
									<button label="Buscar" />
								</hbox>
							</row>
							<row>
								<label value="Logradouro: " />
								<a:bind value="winProdutora.produtora.endereco.CEP" />
								<textbox />
								<label value="Número: " />
								<a:bind value="winProdutora.produtora.endereco.numero" />
								<textbox  />
							</row>
							<row>
								<label value="Complemento: " />
								<a:bind value="winProdutora.produtora.endereco.complemento" />
								<textbox  />
								<label value="Bairro: " />
								<a:bind value="winProdutora.produtora.endereco.bairro" />
								<textbox />
							</row>
							<row>
								<label value="Localidade: " />
								<a:bind value="winProdutora.produtora.endereco.localidade" />
								<textbox />
								<label value="UF: " />
								<a:bind value="winProdutora.produtora.endereco.UF" />
								<textbox />
							</row>
							<row spans="1,3">
								<label value="País: " />								
								
								<a:bind model="winProdutora.listPais" selectedItem="winProdutora.produtora.endereco.pais" />
								<listbox rows="1" mold="select" id="empresaEnderecoPais" >
									<listhead />
									<a:bind _var="tipoPais" label="tipoPais"/>
									<listitem />
								</listbox>
							</row>
						</rows>
					</grid>
				</groupbox>
			</tabpanel>
			<tabpanel>
				<groupbox mold="3d">
					<caption label="Contato:"  />
					
					<grid>
						<columns>
							<column width="20%" />
							<column width="80%" />
						</columns>
						<rows>
							<row>
								<label value="Nome: " />
								<a:bind value="winProdutora.contato.nome" />
								<textbox id="contatoNome" constraint="no empty" />
							</row>
							<row>
								<label value="Departamento: " />
								<a:bind value="winProdutora.contato.departamento" />
								<textbox id="contatoDepartamento" constraint="no empty" />
							</row>
							<row>
								<label value="Função: " />
								<a:bind value="winProdutora.contato.funcao" />
								<textbox id="contatoFuncao" constraint="no empty" />
							</row>
						</rows>
					</grid>
				</groupbox>
				
				<h:br />
				
				<groupbox mold="3d">
					<caption label="Contato de Internet:"  />
					<grid>
						<columns>
							<column width="15%" />
							<column width="85%" />
						</columns>
						<rows>
							<row>
								<label value="E-mail: "/>
								<hbox>
									<a:bind value="winProdutora.contatoEmail.nome; save-when:none" />
									<textbox id="contatoEmail" constraint="/(.+@.+\.[a-z]+)?/: Digite um E-mail válido, ou deixe em branco." />
									<button label="Adicionar" forward="onClick=onAdicionarContatoEmail" />
								</hbox>
							</row>
							<row valign="bottom">
								<label value="E-mail Adicionados: "/>
								<a:bind model="winProdutora.contato.emails" selectedItem="winProdutora.contatoEmailSelecionado" />
								<listbox id="contatoEmailAdicionadoListbox" >
									<listhead />
									<a:bind _var="mail" label="mail.nome"/>
									<listitem />
								</listbox>
							</row>
							<row>
								<label value="MSN: "  />
								<a:bind value="winProdutora.contato.msn" />
								<textbox constraint="/(.+@.+\.[a-z]+)?/: Digite um MSN válido, ou deixe em branco." />
							</row>
							<row>
								<label value="Skype: " />
								<a:bind value="winProdutora.contato.skype" />
								<textbox />
							</row>
						</rows>
					</grid>
				</groupbox>
				
				<h:br />
				
				<groupbox mold="3d">
						<caption label="Telefone:"  />

						<grid>
							<columns>
								<column width="5%" />
								<column width="5%" />
								<column width="5%" />
								<column width="85%" />
							</columns>
							<rows>
								<row spans="1,3">
									<label value="Ramal: " />
									<a:bind value="winProdutora.contatoTelefone.ramal" />
									<textbox cols="3" maxlength="3" constraint="no empty" />
								</row>
								<row>
									<label value="DDI: " />
									<a:bind value="winProdutora.contatoTelefone.DDI" />
									<textbox cols="3" maxlength="3" constraint="no empty" />
									
									<label value="DDD: " />
									<a:bind value="winProdutora.contatoTelefone.DDD" />
									<textbox cols="3" maxlength="3" constraint="no empty" />
	
								</row>
								<row>
									<label value="Telefone: " />
									<a:bind value="winProdutora.contatoTelefone.telefone" />
									<textbox />
									<label value="Tipo: " />
	
									<a:bind model="winProdutora.listTipoTelefone" selectedItem="winProdutora.contatoTelefone.Tipo" />
									<listbox rows="1" mold="select">
										<listhead />
										<a:bind _var="tipoContatoTelefone" label="tipoContatoTelefone"/>
										<listitem />
									</listbox>	
	
								</row>
							</rows>
						</grid>
						<h:br />
						<button label="Adicionar" forward="onClick=onAdicionarContatoTelefone" />
						<separator bar="true" />
						
						<h:br />		
							
						
						<a:bind model="winProdutora.contato.telefones" selectedItem="winProdutora.contatoTelefoneSelecionado"/>							
						<listbox width="100%" id="contatoTelefoneAdicionadoListbox" >
							<listhead sizable="true">
								<listheader label="Ramal" />
								<listheader label="DDI" />
								<listheader label="DDD" />
								<listheader label="Telefone"/>
								<listheader label="Tipo" />
							</listhead>		
							<a:bind _var="thisTelefoneEmpresa"/>
							<listitem>
								<a:bind label="thisTelefoneEmpresa.Ramal"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.DDI"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.DDD"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.Telefone"/>
								<listcell />
								<a:bind label="thisTelefoneEmpresa.Tipo"/>
								<listcell />
							</listitem>	
						</listbox>
							
					</groupbox>
					
					<h:br />
					<separator bar="true" />
					<button label="Adicionar" forward="onClick=onAdicionarContato" />
					<h:br />
					
					<label value="Contatos Adicionados:" />
					<h:br />
					
					 
					<a:bind model="winProdutora.produtora.contatos" selectedItem="winProdutora.contatoSelecionado"/>							
						<listbox width="100%" id="contatoAdicionadoListbox" >
							<listhead />
								
							<a:bind _var="thisContato"/>
							<listitem>
								
								<listcell>
									<h:ul>
										
										<a:bind label="thisContato.nome"/>
										<h:li>
										
											<label value="Nome: " />
											<a:bind value="thisContato.nome"/>
											<label />
											
											<h:br />
											
											<label value="Departamento: " />
											<a:bind value="thisContato.departamento"/>
											<label />
											
											<h:br />
											
											<label value="Função: " />
											<a:bind value="thisContato.funcao"/>
											<label />
											
											<h:br />
											
											<label value="Emails: " />
											 
											<h:ul style="list-style-type: none">
												<h:li>
													<a:bind model="thisContato.emails" />
		       										<listbox width="50%" >
		       											<listhead />
		       											<a:bind _var="thisEmail"/>
		       											<listitem>
		       												<a:bind label="thisEmail.nome"/>
		       												<listcell />
		       											</listitem>
		       										</listbox>
	       										</h:li>
											</h:ul>
											
											<!-- 
											Dá erro de Cannot find associated CollectionItem
											<a:bind model="thisContato.emails" />
											<h:ul style="list-style-type: none">
												<h:li>
													<a:bind _var="thisEmail" label="thisEmail.nome"/>
													<label />
												</h:li>
											</h:ul>
											-->
										</h:li>
										
									</h:ul>
								</listcell>
							</listitem>	
						</listbox>
					
			</tabpanel>
		</tabpanels>
	</tabbox>
	<h:br />
	<separator bar="true" />
	<button label="Cadastrar" forward="onClick=onCadastrar" />
</window>
</zk>

.java

package action;

import java.util.ArrayList;
import java.util.List;

import model.entity.Contato;
import model.entity.Email;
import model.entity.Produtora;
import model.entity.Telefone;
import model.enums.ProdutoraTipo;
import model.enums.TelefoneTipo;

import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.ext.AfterCompose;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Window;


/**
 * @author User
 *
 */
public class ProdutoraCadastro extends Window implements AfterCompose
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 6151686641266572000L;

	private Produtora        produtora = new Produtora();
	
	//Empresa Telefone
	private Telefone         empresaTelefone = new Telefone();
	private Telefone         empresaTelefoneSelecionado = new Telefone();
	
	//Contato
	private Contato          contato = new Contato();
	private Contato          contatoSelecionado = new Contato();
	
	//Contato Email
	private Email			 contatoEmail = new Email();
	private Email			 contatoEmailSelecionado = new Email();
	
	//Contato Telefone
	private Telefone         contatoTelefone = new Telefone();
	private Telefone         contatoTelefoneSelecionado = new Telefone();
	
	//Elementos	
	private Listbox          empresaTelefoneAdicionadoListbox;
	private Listbox          contatoTelefoneAdicionadoListbox;
	
	private Listbox          contatoEmailAdicionadoListbox;
	
	private Listbox          contatoAdicionadoListbox;
	
	
	
	
	public void afterCompose() 
	{		
		
        //wire variables
        Components.wireVariables(this, this);
        
        //NO need to register onXxx event listeners

        //auto forward
        Components.addForwards(this, this);
    }

	
	public void onCreate()
	{				
		//Evita de dar null point exception por contato estar null.
		produtora.setContatos(new ArrayList<Contato>());
	}
	
	@SuppressWarnings("unchecked")
	public void onAdicionarEmpresaTelefone()
	{
		produtora.setTelefones((List<Telefone>)empresaTelefoneAdicionadoListbox.getModel());
		produtora.getTelefones().add(new Telefone(empresaTelefone));
	}
	
	
	@SuppressWarnings("unchecked")
	public void onAdicionarContatoEmail()
	{
		contato.setEmails((List<Email>)contatoEmailAdicionadoListbox.getModel()); 
		contato.getEmails().add(new Email(contatoEmail));
	}
	
	@SuppressWarnings("unchecked")
	public void onAdicionarContatoTelefone()
	{
		contato.setTelefones((List<Telefone>)contatoTelefoneAdicionadoListbox.getModel());
		contato.getTelefones().add(new Telefone(contatoTelefone));
	}
	
	@SuppressWarnings("unchecked")
	public void onAdicionarContato()
	{
		produtora.setContatos((List<Contato>)contatoAdicionadoListbox.getModel());
		produtora.getContatos().add(new Contato(contato));
	}
	
	public void onCadastrar()
	{
		
		/*
		DaoFactory daoFactory = new DaoFactory();
		
		Produtora produtora = new Produtora();
		
		//geral
		produtora.setTipo(ProdutoraTipo.valueOf(ProdutoraTipo.class,tipo.getSelectedItem().getValue()));
		
		produtora.setNome(nome.getValue());
		produtora.setSite(site.getValue());
		
		//Telefone
		List<Telefone> listaTelefonesAdicionados = new ArrayList<Telefone>();
		
		for(int i = 0; i < empresaTelefoneAdicionado.getRows(); i++)
		{
			Listitem item = empresaTelefoneAdicionado.getItemAtIndex(i);
			listaTelefonesAdicionados.add((Telefone) item.getValue()); 
		}
		
		produtora.setTelefones(listaTelefonesAdicionados);
		
		//Endereço
		Endereco endereco = new Endereco();
		endereco.setCep(empresaEnderecoCEP.getValue());
		endereco.setLogradouro(empresaEnderecoLogradouro.getValue());
		endereco.setNumero(empresaEnderecoNumero.getValue());
		endereco.setComplemento(empresaEnderecoComplemento.getValue());
		endereco.setLocalidade(empresaEnderecoLocalidade.getValue());
		endereco.setBairro(empresaEnderecoBairro.getValue());
		endereco.setUF(empresaEnderecoUF.getValue());
		endereco.setPais((empresaEnderecoPais.getSelectedItem().getLabel()));
		
		produtora.setEndereco(endereco);
		
		//Salvar
		daoFactory.beginTransaction();
		
		//Telefone
		TelefoneDao telefoneDao = daoFactory.getTelefoneDao();
		for(Telefone tel : listaTelefonesAdicionados)
		{
			telefoneDao.saveOrUpdate(tel);
		}
		
		//Endereço
		EnderecoDao enderecoDao = daoFactory.getEnderecoDao();
		enderecoDao.saveOrUpdate(endereco);
		
		ProdutoraDao produtoDao = daoFactory.getProdutoDao();
		produtoDao.saveOrUpdate(produtora);
		
		daoFactory.commit();
		daoFactory.close();
		
		try 
		{
			if(Messagebox.show("Cadastro Efetuado com sucesso.<br />Deseja voltar para controle?",
					"Sucesso!!", Messagebox.YES | Messagebox.NO, Messagebox.NONE) == Messagebox.YES)
			{
				Executions.sendRedirect("gravadoraEditoraControle.zul");
			}
			else
			{
				Executions.sendRedirect("gravadoraEditoraCadastro.zul");
			}
		} 
		catch (InterruptedException e) 
		{
			e.printStackTrace();
		}
		*/
	}
	
	//Tipos
	
	public List<String> getListTipoProdutora()
	{
		
		List<String> lista = new ArrayList<String>();
		
		for(ProdutoraTipo pt : ProdutoraTipo.values())
		{
			lista.add(pt.toString());
		}
		
		produtora.setTipo(lista.get(0));
		
		return lista;
	}
	

	public List<String> getListTipoTelefone()
	{
		List<String> lista = new ArrayList<String>();
		for(TelefoneTipo tt : TelefoneTipo.values())
		{
			lista.add(tt.toString());
		}

		empresaTelefone.setTipo(lista.get(0));
		contatoTelefone.setTipo(lista.get(0));
		
		return lista;
	}
	
	public List<String> getListPais()
	{
		List<String> lista = new ArrayList<String>();
		
		lista.add("Brasil");
		lista.add("Brasil");
		
		return lista;
	}


	public Produtora getProdutora() {
		return produtora;
	}



	public void setProdutora(Produtora produtora) {
		this.produtora = produtora;
	}



	public Telefone getEmpresaTelefone() {
		return empresaTelefone;
	}



	public void setEmpresaTelefone(Telefone empresaTelefone) {
		this.empresaTelefone = empresaTelefone;
	}


	public Telefone getEmpresaTelefoneSelecionado() {
		return empresaTelefoneSelecionado;
	}


	public void setEmpresaTelefoneSelecionado(Telefone empresaTelefoneSelecionado) {
		this.empresaTelefoneSelecionado = empresaTelefoneSelecionado;
	}


	public Email getContatoEmail() {
		return contatoEmail;
	}


	public void setContatoEmail(Email contatoEmail) {
		this.contatoEmail = contatoEmail;
	}


	public Listbox getContatoEmailAdicionadosListbox() {
		return contatoEmailAdicionadoListbox;
	}


	public void setContatoEmailAdicionadosListbox(
			Listbox contatoEmailAdicionadosListbox) {
		this.contatoEmailAdicionadoListbox = contatoEmailAdicionadosListbox;
	}


	public Email getContatoEmailSelecionado() {
		return contatoEmailSelecionado;
	}


	public void setContatoEmailSelecionado(Email contatoEmailSelecionado) {
		this.contatoEmailSelecionado = contatoEmailSelecionado;
	}


	public Telefone getContatoTelefone() {
		return contatoTelefone;
	}


	public void setContatoTelefone(Telefone contatoTelefone) {
		this.contatoTelefone = contatoTelefone;
	}


	public Telefone getContatoTelefoneSelecionado() {
		return contatoTelefoneSelecionado;
	}


	public void setContatoTelefoneSelecionado(Telefone contatoTelefoneSelecionado) {
		this.contatoTelefoneSelecionado = contatoTelefoneSelecionado;
	}


	public Contato getContato() {
		return contato;
	}


	public void setContato(Contato contato) {
		this.contato = contato;
	}


	public Contato getContatoSelecionado() {
		return contatoSelecionado;
	}


	public void setContatoSelecionado(Contato contatoSelecionado) {
		this.contatoSelecionado = contatoSelecionado;
	}	
	
}




BAITA Profissional!!! Coitado do cliente de um cara que “se orgulha em não preocupar se a ferramenta que ele desenvolve terá suporte no futuro ou portabilidade para outra ferramenta…”

Triste ler isso!

Vingar, no contexto usado quer dizer: “se tornar popular”.

VÊ SE PRESTA MAIS A ATENÇÃO

Não pegue um termo solto. Leia primeiro o cometário do cara que eu respondi.

Alguém sabe como faço para pegar o valor da segunda coluna do listbox?

O default do zk usando o selectedItem.label é sempre a primeira coluna.


<zk>
    <zscript>
        
        
        public void showValue(){
            alert(list.selectedItem.label); 
        
        }
        
        
        
    </zscript>
    <window title="Bandbox" border="normal">
        <vbox>
            <bandbox id="bd">
                <bandpopup>
                    <vbox>
                        <hbox>Search
                            <textbox/>
                        </hbox>
                        <listbox width="200px" id="list"
		onSelect="bd.value=self.selectedItem.label; bd.closeDropdown(); showValue();">
                            <listhead>
                                <listheader label="Name"/>
                                <listheader label="Description"/>
                            </listhead>
                            <listitem>
                                <listcell label="John"/>
                                <listcell label="CEO"/>
                            </listitem>
                            <listitem>
                                <listcell label="Joe"/>
                                <listcell label="Engineer"/>
                            </listitem>
                            <listitem>
                                <listcell label="Mary"/>
                                <listcell label="Supervisor"/>
                            </listitem>
                        </listbox>
                    </vbox>
                </bandpopup>
            </bandbox>
            
        </vbox>
    </window>
</zk>			

Só para constar. Eu desisti do ZK.

Acabei achando ele muito chato para fazer algumas coisas simples, e eu sempre empacava com dúvidas bestas que não sabia como solucionar.

Estou estudando agora o GWT que propõe a fazer a mesma coisa que o ZK faz, mas com muito mais recursos e com boa documentação,boa comunidade e bons livros.

Eis a solução, não achei complicada.
Apenas altere o trecho abaixo:

&lt;zscript&gt; public void showValue(){ List celulas_da_linha = list.selectedItem.children; alert(" Label da coluna 2: " + ((Listcell) celulas_da_linha.get(1)).label); } &lt;/zscript&gt;

Valeu pela dica genildof.

Funcionou e ficou bem simples.

Obrigado!!! :smiley: :smiley: :smiley:

SanjuanRJ ,

Desculpe por ter te ofendido! Eu achei a declaração leviana, mas eu fui MAIS leviano ainda não prestando atenção no que vc disse antes e nem no próprio POST. Desculpe-me com toda sinceridade.

Agora: não desista! Ao contrário de tu, achei o framework fácil em TUDO! Os únicos problemas dele são integração com um framework de separação de camadas que preste (ou de mercado), a licença e um pouco da perfomance. Qto a essa última eu apenas ouvi falar, não tenho nada em produção. Em desenvolvimento tudo roda tranquilamente, mas… desenvolvimento não é parâmetro!

Eu tbm arrisquei o GWT. Se fosse fazer algo enterprise, apostaria no produto por causa da marca google. Mas o ZK eh imensamente mais simpático!

Abs

Ai felipempantoja
A questão referente ao controle de acesso usando ZK, implementei da seguinte maneira:
Criei uma classe que estende do genericforwardcomposer
essa nova classe é responsavel pelo redirecionamento de minhas paginas zul
nessa classe declara os componentes que estão nas tuas paginas zul
e dizes por exemplo, se o user que tá na sessao for este ou do tipo “abc” entao componente xyz.setVisible(false).
NB: As componentes que declaras na tal classe devem ser as mesmas que estão nas suas zul.