Escolar Documentos
Profissional Documentos
Cultura Documentos
OBJETOS - JAVA
MARINGÁ
2012
LEANDRO APARECIDO JACOMETE
MARINGÁ
2012
LEANDRO APARECIDO JACOMETE
BANCA EXAMINADORA
Orientador:
_______________________________
Msc, Edson Yanaga
CESUMAR
Membro:
_______________________________
Msc, César Fernando Moro
CESUMAR
Dedico este trabalho a Deus, minha esposa e todos que colaboraram
FALTA FAZER
ABSTRACT
FALTA FAZER
LISTA DE FIGURAS
INTRODUÇÃO .........................................................................................................12
1 – FRAMEWORK....................................................................................................13
2 – CGI (COMMON GATEWAY INTERFACE) .........................................................14
3 – PADRÃO MVC (MODEL-VIEW-CONTROLLER) ...............................................15
4 – CAKEPHP ..........................................................................................................18
4.1 – Estrutura Funcional do CakePHP....................................................................18
4.1.1 – Extensões de controlador.............................................................................19
4.1.2 – Extensões de visão ......................................................................................19
4.1.3 – Extensões de modelo ...................................................................................20
4.1.4 – Extensões de aplicação................................................................................21
4.2 – Estrutura de Arquivos e Diretórios do CakePHP .............................................21
4.2.1 – Estrutura do diretório app .............................................................................22
4.3 – Convenções no CakePHP...............................................................................22
4.4 – Validação de Dados ........................................................................................23
4.5 – Testes no CakePHP ........................................................................................26
4.6 – Componentes Principais..................................................................................26
4.7 – Behaviors Principais ........................................................................................27
4.7.1 – ACL behaviors..............................................................................................27
4.7.1.1 – Utilização básica........................................................................................28
4.7.2 – Containable ..................................................................................................29
4.7.3 – Tree (Árvore) ................................................................................................30
4.8 – Helpers Principais............................................................................................31
4.8.1 – AjaxHelper....................................................................................................31
4.8.2 – FormHelper ..................................................................................................32
4.8.3 – CacheHelper ................................................................................................35
5 – JSF (JAVASERVER FACES) .............................................................................36
5.1 – MVC no JSF (JavaServer Faces) ....................................................................37
5.1.1 – Controller......................................................................................................37
5.1.2 – Model............................................................................................................37
5.1.3 – View..............................................................................................................37
5.2 – Serviços Importantes do Framework JSF (JavaServer Faces) .......................38
5.2.1 – Componentes UI...........................................................................................40
5.2.2 – Renderizador................................................................................................41
5.2.3 – Backing beans..............................................................................................42
5.2.4 – Escopo dos beans ........................................................................................43
5.2.5 – Validadores ..................................................................................................43
5.2.6 – Conversor.....................................................................................................46
5.2.7 – Eventos e ouvintes .......................................................................................49
5.2.7.1 – Eventos do ciclo de vida............................................................................50
5.2.7.2 – Eventos de alteração de valor ...................................................................50
5.2.7.3 – Eventos de ação........................................................................................52
5.2.7.4 – Eventos de fase.........................................................................................53
5.2.8 – Mensagens...................................................................................................54
5.2.9 – Navegação ...................................................................................................55
5.3 – Ciclo de Vida do JSF (JavaServer Faces).......................................................56
5.4 – Tags Fundamentais do JSF (JavaServer Faces) ............................................57
6 – COMPARAÇÕES ENTRE CAKEPHP E JSF (JAVASERVER FACES) .............61
6.1 – Documentação ................................................................................................61
6.1.1 – JSF (JavaServer Faces)...............................................................................61
6.1.2 – CakePHP......................................................................................................61
6.2 – Curva de Aprendizagem..................................................................................62
6.2.1 – JSF (JavaServer Faces)...............................................................................62
6.2.2 – CakePHP......................................................................................................63
6.3 – Integração com Outros Frameworks ...............................................................64
6.3.1 – JSF (JavaServer Faces)...............................................................................64
6.3.1.1 – Principais frameworks RIA para JSF (JavaServer Faces).........................65
6.3.2 – CakePHP......................................................................................................66
6.4 – Comunidades ..................................................................................................68
6.4.1 – JSF (JavaServer Faces)...............................................................................68
6.4.2 – CakePHP......................................................................................................69
CONCLUSÃO...........................................................................................................71
REFERÊNCIAS ........................................................................................................73
12
INTRODUÇÃO
1 – FRAMEWORK
Embora a linguagem tipicamente associada aos CGI seja o PERL, o CGI foi
concebido por forma a ser independente da linguagem utilizada. Atualmente
tecnologias como ASP.NET ou PHP continuam a utilizar a especificação.
15
4 – CAKEPHP
beforeFind();
afterFind();
beforeValidate();
beforeSave();
afterSave();
beforeDelete();
afterDelete().
Os nomes desses métodos devem ser descritivos o bastante para que saiba
o que eles fazem.
21
Tanto os controladores, ajudantes e modelos têm uma classe pai que pode
ser usada para definir modificações na aplicação. AppController (localizado em
'/app/app_controller.php'), AppHelper (localizado em '/app/app_helper.php') e
AppModel (localizado em '/app/app_model.php'), esse são os lugares ideais para
colocar métodos que precisam ser acessados entre todos os controladores,
ajudantes e modelos.
app;
cake;
vendors;
plugins;
htaccess;
index.php;
README.
<?php
class Usuario extends AppModel {
24
<?php
class Usuario extends AppModel {
var $name = 'Usuario';
var $validate = array(
'login' => 'alphaNumeric',
'email' => 'email',
'dataNascimento' => 'date'
);
}
?>
<?php
class Usuario extends AppModel {
var $name = 'Usuario';
var $validate = array(
'login' => array(
'alphanumeric' => array(
'rule' => 'alphaNumeric',
'required' => true,
'message' => 'Letras e números somente'
),
'between' => array(
'rule' => array('between', 5, 15),
'message' => 'Entre 5 e 15 caracteres'
)
25
),
'senha' => array(
'rule' => array('minLength', '8'),
'message' => 'Mínimo de 8 caracteres'
),
'email' => 'email',
'dataNascimento' => array(
'rule' => 'date',
'message' => 'Insira uma data válida',
'allowEmpty' => true
)
);
}
?>
Neste exemplo duas regras de validação foram definidas para o login, ele
deve conter apenas letras e números e o tamanho deve ter entre 5 e 15 caracteres.
O campo senha deve ter no mínimo 8 caracteres. O email deve ser um endereço de
email válido, e o campo data de nascimento deve ser uma data válida. E também
foram definidas mensagens personalizadas para que o CakePHP que serão
mostradas para o usuário quando as regras definidas falharem.
Como foi mostrado no exemplo acima, um único campo pode haver múltiplas
regras de validação. No CakePHP há três diferentes formas de definir regras de
validação: arrays simples, regra única por campo, e múltiplas regras por campo.
<?php
class Usuario extends AppModel {
var $name = 'Usuario';
26
Nome Descrição
O Acl componente fornece de maneira fácil relação entre acesso
Acl
de controle entre banco de dados e sistema.
O auth componente fornece de maneira fácil o uso de
autenticação no sistema com variedades, tais como chamadas
Auth
de retorno de controller, Acl, ou chamadas de retorno de
Objetos.
O componente da sessão fornece um envoltório independente
Session
do armazenamento às sessões do PHP.
O request handler permite que você filtre as requisições de seus
RequestHandler visitantes e informe sua aplicação sobre os tipos favoráveis e as
informações pedidas.
O security componente permite que você ajuste uma segurança
Security
mais alta e controle a autenticação de HTTP.
Uma relação usada para emitir email usando de diversos
Email
agentes de transferência de email incluindo php mail() e smtp.
O cookie componente comporta-se de forma similar ao
Cookie SessionComponent que fornece um envoltório para o apoio
nativo do cookie.
Tabela 1 – Componentes Principais CakePHP
Essencialmente, ACL é o que é usado para decidir quando um ARO quer ter
acesso a um ACO. O AclBehavior possibilita a conexão automática dos modelos
com suas tabelas Acl (Lista de Controle de Acesso). Seu uso necessita de uma
implementação do método parentNode() em seu modelo. AclBehavior pode ser
usado para criar ACOs(Controle de Acesso a Objetos) ou AROs(Acesso de
Requisição de Objetos).
AROs é usada quando um objeto não tem uma relação direta com o registro
em sua base de dados, podendo fornecer um álias para o objeto.
Qualquer modelo pode ser um Object Request Access, mas normalmente
ele é ou o modelo do usuário ou um modelo de grupo que a autorização é feita.
<? Php
Usuario class extend AppModel {
var $ name = 'Usuario';
var $ actsAs = array ('Acl');
parentNode function () {
}
29
}>
<? Php
Grupo class extend AppModel {
var $ name = 'Grupo';
var $ actsAs = array ('Acl');
parentNode function () {
if (! $ this-> id) {
return null;
}
Dessa forma o modelo agora está associado com uma entrada de AROs na
tabela do banco de dados.
4.7.2 - Containable
$this->Post->contain('Tag');
$this->Post->find('all');
Para usar o Tree behavior, sua tabela da base de dados precisa dos três
campos que estão listados a seguir (todos são inteiros):
31
4.8.1 - AjaxHelper
echo $html->link('prototype');
echo $html->link('scriptaculous');
4.8.2 - FormHelper
Se uma string form informada como primeiro parâmetro para o método end(),
o FormHelper vai gerar um botão de submit com o nome correspondente à string
informada.
4.8.3 - CacheHelper
5.1.1 - Controller
5.1.2 - Model
5.1.3 - View
<h:inputText value=”#{user.name}”/>
Termo Descrição
Componente UI (também Um objeto sem estado de conversação
chamado de control ou associado, mantido no servidor, que
simplesmente componente) fornece uma funcionalidade específica
para interagir com um usuário final.
39
5.2.1 - Componentes UI
5.2.2 - Renderizador
contudo, é fácil estender o framework JSF de modo a produzir comandos para outra
linguagem de descrição de páginas, como WML ou XUL, a varias exemplos em
livros e na Internet, que mostra como usar o JSF para se comunicar com telefones
celulares habilitados para Java ME.
Com esta associação, temos uma sincronia, caso o valor seja mudado no
componente, a propriedade do bean terá seu valor modificado e recíproca também
ocorre. Pode-se também ligar uma instância de componente a uma propriedade de
backing bean:
5.2.5 - Validadores
É difícil imaginar uma aplicação web que não precise fazer uma boa dose de
validações dos dados, O JSF atende a estes requisitos, tanto no que diz respeito a
fornecer validadores padrões, como oferecer um mecanismo simples para
implementar seus próprios validadores. A função principal da validação é proteger o
modelo. Como o JSF usa fases separadas para processar validadores e atualizar os
valores do modelo, isso garante que o modelo não será colocado em um estado
inconsistente se alguns dos inputs não puderem ser validados.
envolvida e está lógica é especifica e não precisa ser compartilhada com outras
páginas.
<f:validator validatorId=”javax.faces.validator.LengthValidator”>
<f:attribute name=”minimum” value=”5”/>
</f:validator>
</h:inputText>
Este método então seria utilizado dentro de uma tag JSF através do atributo
validator como abaixo:
<h:inputText id=”email”
value=”#{pessoa.email}”
validator=”#{pessoa.checkEmail}”
</h:inputText>
public EmailValidator(){
pattern = Pattern.compile(EMAIL_PATTERN);
}
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
matcher = pattern.matcher(value.toString());
if(!matcher.matches()){
FacesMessage msg = new FacesMessage("E-mail validation failed.", "Invalid E-mail format.");
msg.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(msg);
}
}
}
Esta classe validadora então seria utilizado dentro da pagina JSF através da
tag f:validator, como mostra o exemplo abaixo:
5.2.6 - Conversor
O JSF já trás em sua biblioteca vários converters padrões, que são muito
utilizados no dia a dia de um programador como conversão de tipos: date, double,
number e etc. Ele também oferece a opção de criação de converters customizados
para cada necessidade.
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && !value.isEmpty()) {
return Cidade.findById(new Long(value));
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value instanceof Cidade) {
Cidade cidade = (Cidade) value;
return cidade.getId().toString();
}
return "";
}
}
Esta classe conversora então seria utilizado dentro da pagina JSF como
mostra o exemplo abaixo:
Para manipular eventos é preciso ter uma compreensão básica deste ciclo
de vida.
50
1. Restaurar Apresentação;
2. Aplicar Valores de Requisição;
3. Processar Validações;
4. Atualizar Valores no Modelo;
5. Invocar Aplicação;
6. Renderizar Resposta.
API javax.faces.event.ValueChangeEvent
Métodos Descrição
Retorna o componente de input que
UIComponent getComponente()
ativou o evento.
Retorna o novo valor do componente,
Object getNewValue() depois que o valor foi convertido e
validado.
Retorna o valor anterior do
Object getOldValue()
componente.
Tabela 5 – API javax.faces.event.ValueChangeEvent
API javax.faces.event.FacesEvent
Métodos Descrição
Coloca o evento na fila para ser
void queue() entregue ao fim da fase atual do ciclo
de vida.
Retorna o identificador de fase
PhaseId getPhaseId() correspondente á fase em que o evento
será entregue.
Define o identificador e fase
void setPhaseId(PhaseId) correspondente á fase em que o evento
será entregue.
Tabela 6 – API javax.faces.event.FacesEvent
<h:commandLink actionListener=”#{bean.linkAtivado}”>
53
…
</h:commandLink>
<faces-config>
<lifecycle>
<phase-listener>com.corejsf.PhaseTracker</phase-listener>
</lifecycle>
</faces-config>
1. PhaseId getPhaseId();
2. void afterPhase(PhaseEvent);
3. void beforePhase(PhaseEvent).
5.2.8 - Mensagens
5.2.9 - Navegação
Tags Descrição
View Cria a visão de nível mais alto
Subview Cria uma subvisão de uma visão
Attribute Define um atributo (key/value) em seu
componente de origem
Param Adiciona um parametro subordinado a
seu componente de origem
Facet Adiciona uma faceta a um componente
actionListener Adiciona um listener de ação que define
uma propriedade
setPropertyActionListener Adiciona um listener de ação a um
componente
valueChangeListener Adiciona uma listener de mudança de
valor a um componente
phaseListener Adiciona um listener de fase à visão de
origem
Converter Adiciona um conversor arbitrário a um
componente
convertDateTime Adiciona um conversor de data e hora a
um componente
convertNumber Adiciona um conversor numérico a um
componente
Validator Adiciona um validador a um
componente
validatedateDoubleRange Valida uma range dupla(double) para o
valor de um componente
validateLongRange Valida a extensão de valor de um
componente
loadBundle Carrega um resource bundle; armazena
propriedades como um Map
Selectitems Especifica itens para um componente
select one ou select many
Selectitem Especifica um item para um
59
Atributos;
Listeners;
Conversores;
Validadores;
Facetas.
Tags Descrição
Form Formulário HTML
Input Text Controle de input de texto de uma
única linha
inputTextarea Controle de input de texto de várias
linhas
inputSecret Controle de input de senha
inputHidden Campo oculto
outputLabel Rótulo para outro componente, para
fins de acessibilidade
outputLink Âncora HTML
outputFormat Igual a outputText, mas formata
mensagens compostas
outputText Output de texto de uma única linha
commandButton Botões: submit, reset ou pushbutton
commandLink Link que age como um pushbutton
Message Exibe a mensagem mais recente de um
60
componente
Messages Exibe todas as mensagens
graphicImage Exibe uma imagem
selectOneListbox Caixa de listagem para seleção de um
único item
selectOneMenu Menu para seleção de um único item
selectOneRadio Conjunto de botões de rádio
selectBooleanCheckbox Caixa de verificação
selectManyCheckbox Conjunto de caixas de verificação
selectManyListbox Caixa de listagem para seleção de
vários itens
selectManyMenu Menu para seleção de vários itens
panelGrid Tabela HTML
panelGroup Dois ou mais componentes dispostos
como um só
dataTable Controle de tabela com muitos recursos
Column Coluna em uma dataTable
Tabela 8 – Tags HTML do JSF
61
6.1 - Documentação
O Java Server Faces por ser uma especificação do Java EE, possui grande
documentação disponível, a documentação é bem estruturada, facilitando assim o
estudo e a solução de problemas quando se está utilizando a tecnologia. A
documentação explica toda parte técnica e estrutural do framework, mostrando
pequenos exemplos de utilizações de cada item constante na documentação.
6.1.2 - CakePHP
engenharia de software, com certeza não teria muitas dificuldades para aprender as
implementações que as tecnologias Java faz da mesma.
6.2.2 - CakePHP
Framework Descrição
PrimeFaces kit mais popular da atualidade, com
muitas opções, inclusive versão para
mobile.
JBoss RichFaces kit muito utilizado pela comunidade,
com muitas opções e recursos ajax
adicionais interessantes.
ICEfaces kit muito interessante, com muitas
opções que usam um tecnologia de
renderização diferencia chamada de
Direct-to-DOM (D2D).
OpenFaces kit que vem ganhando bastante
maturidade nos últimos tempos, com
muitas opções interessante,
caminhando para os tops dos mais
usadas.
Apache Tomahawk Componentes da Apache Software
Fundation.
Jenia Faces Vários componentes diferenciados.
Web Galileo Faces Vários componentes diferenciados.
GMaps4JSF Componentes da Google integrando o
GoogleMaps com o modelo de JSF.
Tabela 9 – Principais Frameworks RIA para JSF
66
Por o JSF ser um padrão para desenvolvimento web em Java, faz com que
cada vez mais apareçam ferramentas que disponibilizam a integração com o
JavaServer Faces, fazendo assim que cada vez mais o desenvolvedor JSF esteja
amplamente amparado para buscar a melhor solução para os problemas do dia-dia.
6.3.2 - CakePHP
Com o crescimento do Adobe Flex para geração de interfaces RIA para web,
apareceram várias formar de integrar a tecnologia Flex com PHP. Flex possui um
formato próprio de comunicação – Action Message Format (AMF) – que é um
formato binário e nativo dentro da plataforma Flash/Flex.
Biblioteca Descrição
AMFPHP Utiliza-se a biblioteca dentro do
conceito de “vendors”, dessa forma a
biblioteca é inclusa no projeto, podendo
ser chamada quando necessário.
CakeAmfFPHP Puglin para CakePHP, um dos
primeiros a serem desenvolvidos, está
parado na versão 0.6 utiliza nele a
biblioteca AMFPHP.
CakeAMF Plugin que possui como
desenvolvedores parte do Core Team
do CakePHP.
CpAMF Plugin que tem como base o
CakeAmfPHP, possui atualizações
constantes.
FlexibeCake Controle que intercepta chamadas e
retorna conteúdo AMF, ele utiliza a
implementação Zend_AMF.
Tabela 10 – Bibliotecas para Interagir PHP com AMF
68
6.4 - Comunidades
Uma das grandes forças do JSF é sua comunidade, por ser muito ativa
auxilia no aprendizado e na solução de problemas enfrentados pelos
desenvolvedores. Outro ponto positivo a respeito da JSF é o fato de ser um padrão
aberto, dessa forma, ferramentas e bibliotecas podem ser desenvolvidas por
diversas empresas ou comunidades e o desenvolvedor não fica preso às mudanças
de humor de uma empresa ou mesmo a um único projeto.
http://javaserverfaces.java.net/;
http://groups.google.com/group/javasf;
http://www.jsfcentral.com/;
http://www.javaserverfaces.org/;
https://javaserverfaces.dev.java.net/mailinglists.html;
http://myfaces.apache.org/mail-lists.html;
http://forums.java.net;
https://javaserverfaces.dev.java.net/issues/;
http://www.java.net/blogs/edburns/;
http://weblogs.java.net/blog/rogerk/;
http://blogs.sun.com/rlubke/;
http://www.java.net/blogs/driscoll/;
http://blogs.steeplesoft.com/;
http://davidgearyblog.wordpress.com/;
http://andyschwartz.wordpress.com/;
http://mkblog.exadel.com/;
http://www.mundoj.com.br;
http://javafree.uol.com.br;
http://www.oracle.com/technetwork/java/javamagazine/index.html;
http://www.devmedia.com.br/java;
http://soujava.org.br/
6.4.2 - CakePHP
http://tv.cakephp.org;
http://bakery.cakephp.org;
http://cakephp.org;
http://groups.google.com/group/cake-php;
http://book.cakephp.org;
http://blog.cakephp-brasil.org;
http://groups.google.com/group/cake-php-pt;
http://cakebaker.42dh.com;
https://github.com/cakephp/cakephp;
http://www.revistaphp.com.br;
http://forum.imasters.com.br/forum/265-cakephp-forum-oficial-do-brasil-
cakephpcombr/;
http://www.cakephpforum.net.
71
CONCLUSÃO
Com esse trabalho pode-se dizer que não existe um molde para que um
framework MVC seja selecionando, entretanto, pode-se observar algumas das
particularidades que podem influenciar na escolha. Em termos de aplicações é
possível construir aplicações que utilizem tanto o framework JavaServer Faces
quanto o CakePHP, em ambos os casos há uma estrutura bem definida que satisfaz
o negócio das organizações.
Com base nos estudos realizados sobre os dois frameworks é possível dizer
que o JavaServer Faces possui vantagens sobre o CakePHP em termos de
desenvolvimento web.
REFERÊNCIAS
FRANÇA Mendonça, Rafael. MVC - Padrão Arquitetural MVC e suas aplicações para
WEB. Disponível em <http://www.slideshare.net/rafael.ufs/padro-arquitetural-mvc-e-
suas-aplicaes-para-web>. Acesso em: 02 de Junho de 2011.