Escolar Documentos
Profissional Documentos
Cultura Documentos
Curso Wicket
Curso Wicket
Introduo
Introduo
O que Wicket?
Concorrente de JSF
Breve Histria
Problemas na web
Problemas na web
rodam em servidor;
usam o browser como plataforma de interao com usurio.
Problemas na web
Wicket HTML
Wicket HTML
HTML - Exemplos
JSP:
<ul>
<c:forEach var="item" items="${requestScope.items}">
<li><c:out value="item.text"/></li>
</c:forEach>
</ul>
Wicket:
<ul wicket:id="lista">
<li wicket:id="item">Aqui vai o item da lista</li>
</ul>
Spaghetti code
O compilador pode te ajudar muito pouco muitas
verificaes so feitas apenas em execuo.
As IDEs tambm ajudam pouco (refactoring, por
exemplo). Mesmo que a IDE oferea bom suporte a
JSPs ou templates Facelets, por exemplo,
dificilmente ser to bom quanto para Java.
complicado trabalhar com os designers. Muitas
vezes joga-se fora o HTML que elem mandam.
Muito difcil criar abstraes reusveis.
Site: http://wicket.apache.org
Livro: Wicket in Action: http://www.manning.com/
dashorst/
Boa introduo:
http://wicket.apache.org/introduction.html
Wiki, com bastante contedo:
http://cwiki.apache.org/WICKET/
Muito importante:
http://cwiki.apache.org/WICKET/reference-library.html.
Referncias
Exemplos:
http://www.wicketstuff.org/wicket13/ - o melhor
conjunto de exemplos. Rodando e com fontes.
Vejam o link Source code na parte superior direita
das telas.
http://wicket.apache.org/examples.html
Ambiente:
hello
Em todos os exemplos:
Exemplo Um link
O segundo exemplo.
Exemplo: hello-com-link
RequestCycleProcessor
SessionStore
RequestTarget
Requisio
Instncias existem
apenas durante
a requisio.
RequestCycle
Request
Uso freqente
Response
Uso eventual
Uso raro
Application
RequestCycle
Session
Application
Isso obrigatrio.
Application
Session, RequestCycle
RequestCycle
Template
(HTML)
Componente
(Label, Form, ...)
Model
Pginas
Pginas
Pginas
Componentes - introduo
Componentes - introduo
Componentes - template
Uma pgina:
public class HomePage extends WebPage {
public HomePage() {
Label label = new Label("mensagem", "Ol, Mundo!");
add(label);
}
}
Trecho do template:
<body>
<span wicket:id="mensagem">O "Ol, Mundo" vir aqui.</span>
</body>
Componentes Hierarquia
Componentes Hierarquia
Classe (construtor):
public HomePage() {
Form form = new Form("form");
add(form);
form.add(new TextField("nome"));
}
Trecho do template:
<form wicket:id="form">
Nome: <input type="text" wicket:id="nome">
</form>
Componentes Hierarquia
Depende do componente.
Olhe o Javadoc.
Tipos de requisies
Bookmarkable
http://servidor/app
http://servidor/app/pessoa/incluir
http://servidor/app/pessoa/detalhar/id/21
http://servidor/app/pessoa/detalhar?id=21
No bookmarkable.
http://servidor/app/?wicket:interface=:2:link::ILinkListener::
URLs Bookmarkable
Application.getHomePage().
URLs Bookmarkable
public MinhaPagina()
public MinhaPagina(PageParameters)
URLs no Bookmarkable
Ex: Link
Observaes:
Model cont.
Model cont.
Model cont.
Models cont.
models-exemplo1
models-exemplo2
Reforando:
Model e PropertyModel
CompoundPropertyModel
LoadableDetachableModel
StringResourceModel e ResourceModel
crie a sua...
Formulrios
Formulrios
Melhores referncias:
Javadocs
Muito bom: http://www.wicket-library.com/wicketexamples/forminput/
Exemplos:
formularios-1
formularios-2
CompoundPropertyModel
Exemplo: formularios-3
Processamento de formulrios
Incio
Leitura da
requisio
falhou?
Guarda a entrada
em String
temporariamente.
falhou?
onError
onSubmit
Converso
String->Model
(no atualiza model ainda)
Verificao de
required
falhou?
falhou?
Update dos
modelos
(model.setObject)
Validao
Conversores
Problema:
Implementaes de IConverter.
Converters
normalmente automtico.
Exemplo: converters-1
Converters escolhendo um
Duas formas:
Converters escolhendo um
Geral:
Por componente
Sobrescrever Application.newConverterLocator()
Exemplo: converters-2
Exemplo:
1.HomePage.properties
2.BasePage.properties
3.HelloApplication.properties
4.BaseApplication.properties
Exemplo
1 IConverter.<tipo>
IConverter.Date
2 <id>.IConverter.<tipo>
data.IConverter.Date
3 <id composto>.IConverter.<tipo>
form.data.IConverter.Date
Exemplo: converters-properties-1
Duas formas:
Arquivo de propriedades
Arquivo de propriedades.
Chave:
Exemplo: labels-1
Mtodo setLabel
Exemplo: labels-2
Tem internacionalizao?
Se positivo: properties
Validao
componente.add(IValidator)
Validao
StringValidator.exactLength
StringValidator.maximumLength
...
PatternValidator.xxxxx
NumberValidator.xxxxx
EmailAddressValidator
DateValidator
UrlValidator
Validao
Exemplo: validacao-1
Criando um validador
Mtodo onValidate.
Validao - mensagens
Arquivos de propriedades
Chaves:
Validao - mensagens
Validador
Chave
NumberValidator.range()
NumberValidator.range
MinimumValidator
NumberValidator.minimum()
NumberValidator.minimum
...
StringValidator (enclosing class)
ExactLengthValidator
StringValidator.exactLength()
StringValidator.exactLength
...
Outros (sem enclosing class)
PatternValidator
new PatternValidator()
PatternValidator
componente.setRequired
RequiredTextField
Required
...
Especiais
Required
Validao - mensagens
Direta. Ex:
Validao - mensagens
${input}: valor
Alguns tem:
Mtodo setDefaultFormProcessing(boolean)
Nos componentes:
Button
SubmitLink
Mensagens rpidas
Mtodos de Component:
Mais usados:
error: Erros.
Exemplo: flash-messages
Repetidores
ListView
DataView
RepeatingView
Loop
ListView
Muito usado
Relativamente simples
Exemplo: listview-1
Repetidores
Loop
RepeatingView:
Ver Javadoc
LoadableDetachableModel
problema
Wicket stateful
Guarda todas as pginas em memria e em
disco
Mas e as referncias contidas nelas?
Guarda tambm
LoadableDetachableModel
problema
Entidades de negcio
Resultados de pesquisa
LoadableDetachableModel ciclo
de requisio
Ciclo de requisio:
1.Recebe requisio
2.Decodifica a requisio
3.Encontra a pgina e o componente que iro responder
4.Executa os eventos
5.Renderiza a pgina
6.Excuta o mtodo detach() de:
1. Todos os componentes das pginas envolvidas na requisio
2. Todos os Models das pginas
3. Sesso
LoadableDetachableModel ciclo
de requisio
Principalmente referncias
LoadableDetachableModel um
caso comum
Um caso comum:
LoadableDetachableModel
soluo
Exemplos: loadabledetachablemodel-1 e 2
Outro motivo:
LoadableDetachableModel e form
Exemplo: loadabledetachablemodel-3
DataView
Exemplos:
Herana de pginas
<wicket:extend>
<wicket:child>
Exemplo: heranca-1
Painis
Exemplo: panel-1
H mais: http://cwiki.apache.org/WICKET/wickets-xhtml-tags.html
<wicket:remove>
<wicket:head>
<wicket:enclosure>
Exemplo: tags-1
Escopo de aplicao:
Escopo de sesso:
Tipos!
Exemplo: session-1
Thread safety
Pginas so thread-safe
Cuidados:
Duas formas:
No bookmarkable
Bookmarkable
No bookmarkable:
Se:
Ento...:
Bookmarkable:
Relembrando:
public MinhaPagina(PageParameters)
Exemplo: pagina-com-parametros
Behaviors
Behaviors
Behavior interessante:
Wicket e Ajax
Assunto extenso...
Ordem de busca:
1.Properties da pgina que contm o componente
2.Properties das superclasses da pgina
3.Properties do componente.
4.Properties das superclasses do componente.
5.Properties da aplicao.
6.Properties das superclasses da aplicao.
Mtodo getString
Localizer
componente.getLocalizer().getString(...)
Oferece mais opes que componente.getString().
O Localizer nico por aplicativo (mesmo que seja obtido pelo
componente).
Lembre-se:
componente.getString(chave)
Modelos internacionais
ResourceModel
StringResourceModel
Apenas leitura
ResourceModel
StringResourceModel:
mais features
veja Javadoc.
Exemplo: resource-models
Internacionalizao direto no
template
Tag especial:
<wicket:message>
Substitui o trecho interno pelo contedo obtido a
partir da chave
<span>
<wicket:message key="chave">Texto</wicket:message>
</span>
texto=Novo Texto
<span>
Novo Texto
</span>
Internacionalizao direto no
template
Atributo wicket:message
Templates internacionais
Mais referncias
Viso (filosofia):
http://wicket.apache.org/vision.html
Livro: Enjoying Web Development with Wicket:
http://www.agileskills2.org/EWDW/
Wicket 1.3
A Year of Wicket