Quais são os princípios do desenvolvimento de aplicativos web com ação baseada em java quadros?

StackOverflow https://stackoverflow.com/questions/2852481

  •  27-09-2019
  •  | 
  •  

Pergunta

Fundo

Eu estou indo para desenvolver um novo aplicativo da web com o java.Não é muito grande ou muito complexo, e eu tenho bastante tempo até que ele vai "oficialmente" começar.

Eu tenho alguns JSF/Facelets desenvolvimento de plano de fundo (cerca de metade de um ano).E eu também tenho alguma experiência com JSP+JSTL.

Na auto-educação, de finalidade (e também a fim de encontrar a melhor solução) eu quero um protótipo do novo projeto com um tipo de ação baseado em frameworks.Na verdade, eu vai escolher entre o Spring MVC e Listras.

Problema

A fim de obter a correta impressão sobre a ação baseada em quadros (em comparação com JSF) eu quero ter certeza de que eu usá-los corretamente (em maior ou menor grau).

Então, aqui vou listar alguns dos mais frequentes tarefas (pelo menos para mim) e descrever como eu resolvê-los com JSF.Eu quero saber como eles devem ser resolvidos com ação baseado no framework (ou separadamente com Spring MVC e Listras se há alguma diferença para a tarefa concreta).

  1. A composição do conteúdo:Posso aplicar-pronto-para-uso de componente do padrão jsf (bibliotecas de núcleo e html) ou a partir de terceiros 3 libs (como RichFaces).Eu posso combinar componentes simples e pode facilmente criar os meus próprios componentes, que são baseados em componentes padrão.
  2. Processamento de dados (primitiva ou tipos de referência) no formato correto:Cada componente permite especificar um conversor de para transformar os dados em ambos os sentidos (para compor e enviar para o servidor).Converter é, como de costume, uma classe simples com 2 pequenas métodos.
  3. A navegação do Site:Eu especificar um conjunto de navegação-casos no faces-config.xml.Então eu especificar ação-atributo de um link (ou um botão) que deve corresponder a um ou mais dos navegação casos.A melhor correspondência é escolhido pelo JSF.
  4. A implementação de fluxo (multiforme assistentes por exemplo):Eu estou usando JSF 1.2, então eu uso Apache Orquestra para o fluxo (conversação) escopo.
  5. Formulário de processamento de:Eu tenho um padrão bastante java bean (backing bean em JSF termos) com algumas possibilidades.Eu 'mapa' campos do formulário nesta feijão propriedades.Se tudo correr bem (não há exceções e validação é passado) então todas estas propriedades são definidas com os valores dos campos de formulário.Então eu posso chamar um método (especificado no botão ação atributo) para executar alguma lógica e seqüência de retorno que deve muito a um dos meus navegação casos para ir para a próxima tela.
  6. Validação de formulários:Eu posso criar validador personalizado (ou escolher) e adicioná-lo para quase cada componente.3º-o partido bibliotecas têm conjuntos de costume ajax-validadores.Padrão de validadores de trabalho só depois que a página é submetida.Na verdade, eu não gosto de como a validação no JSF trabalha.Muita magia lá.Muitos componentes padrão (ou talvez todas) têm predefinidos, validação e é impossível para desativá-lo (Talvez nem sempre, mas eu encontrei muitos problemas com isso).
  7. Ajax suporte:muitos de terceiros 3 bibliotecas (MyFaces, IceFaces, OpenFaces, AnotherPrefixFaces...) têm forte ajax apoio e funciona muito bem.Até você encontrar um problema.Muita magia lá também.É muito difícil para fazê-lo funcionar, se não funcionar, mas você fez certo, como é descrito no manual.
  8. User-friendly URLs: as pessoas dizem que existem algumas bibliotecas que existem.E isso pode ser feito com filtros bem.Mas eu nunca tentei.Parece muito complexo para o primeiro olhar.

Agradecemos antecipadamente por explicando como esses itens (ou alguns deles) pode ser feito com ação baseado no framework.

Foi útil?

Solução

Eu vou fazer o meu melhor para responder sobre Listras.Eu usei Struts e JSF no passado, mas não recentemente, então o melhor que eu tenho noções vagas e sentimentos sobre eles.

Estamos familiarizados com w/ Listras, use-a para tudo o mais agora, e realmente apreciá-lo.É fácil saltar para, suporta muitos dos complicado cenários, mas você também é livre para trabalhar do lado de FORA, o que é realmente importante quando você quer construir seu próprio ajax widgets ou falar para outro sistema, ou algo assim.

Se você for, listras rota, eu definitivamente recomendo a compra ou download o livro.É uma "one stop shop" para tudo que você precisa para Listras, e é praticamente a única documentação para Stripersist (característica muito legal, mas NÃO web docs).


A composição do conteúdo:Posso aplicar-pronto-para-uso de componente do padrão jsf (bibliotecas de núcleo e html) ou a partir de terceiros 3 libs (como RichFaces).Eu posso combinar componentes simples e pode facilmente criar os meus próprios componentes, que são baseados em componentes padrão.

Isso é semelhante.Núcleo, Html, Fmt, etc.bem como quaisquer marcas personalizadas que você encontrar, inc.visualização:marca, embalagem de marca, e criar o seu próprio.No entanto, obviamente, você não lidar ao nível do componente de agora, você lidar com uma marca que determina o que está na página / enviados para ou a partir do servidor.

Processamento de dados (primitiva ou tipos de referência) em formato correto:Cada componente permite especificar um conversor para transformar os dados em ambos os sentidos (para compor e enviar para o servidor).Converter é, como de costume, uma classe simples com 2 pequenas métodos.

Listras tem muitas construído em conversores, e é fácil para criar conversores personalizados para seus tipos de dados mais complexos.Listras suporta muito complexas estruturas de dados a serem mapeados com pouco incômodo.Combinado com Stripersist, por exemplo, eu posso colocar o meu modelo de objeto diretamente no ActionBean, colocar alguns campos no formulário, e Stripersist vai hidratar o modelo a partir do banco de dados (com base em seu PK) e atualização com os campos que eu colocar em forma, tudo isso antes de liberar o controle para mim no ActionBean.

Site de navegação:Eu especificar um conjunto de navegação casos em faces-config.xml.Então eu especificar ação-atributo de um link (ou um botão) que deve corresponder a um ou mais dos navegação casos.A melhor correspondência é escolhido pelo JSF.

Navegação em listras é baseado no que você nomeie o ActionBeans, inicialmente.Não há xml.Além disso, muito urls são uma anotação no ActionBean nível de Listras 1.5, de modo que você pode fazer coisas como @UrlBinding("/{$event}/{model}") onde /view/5 iria levá-lo para o "view"manipulador de eventos para o Modelo de objeto com o ID/PK de 5.

A implementação de fluxo (multiforme assistentes por exemplo):Eu estou usando JSF 1.2 então, eu uso o Apache Orquestra para o fluxo (conversação) escopo.

Enquanto eu só estou vagamente familiar com o conceito de conversa âmbito, tem Listras O Assistente De Formulário a funcionalidade, mas eu não tenho usado e sou incapaz de realmente expandir isso.Eu acho que é uma ideia semelhante embora.

Formulário de processamento:Eu tenho um padrão bastante java bean (backing bean em JSF termos) com algumas possibilidades.Eu 'mapa' campos do formulário nesta feijão propriedades.Se tudo correr bem (não há exceções e validação é passado) então todas estas propriedades são definidas com os valores dos campos de formulário.Então eu posso chamar um método (especificado na ação do botão de atributo) para executar alguma lógica e seqüência de retorno que deve muito a um dos meus navegação casos para ir para a próxima tela.

Não drasticamente diferentes.Em vez de componentes em seu [ação] de feijão, agora você tem o Java ou tipos personalizados.ActionBeans são criados por solicitação e jogado fora, a menos que você faça algo como colocá-lo em sessão, ou assistente, ou o que seja.Isso é bom, porque todas as variáveis de instância são mapeados para os dados do formulário, use-o, em seguida, jogá-lo fora, e não tem para lidar com problemas de sincronização como struts fez.Depois de fazer a sua coisa com os dados, Listras permite que você envie um ForwardResolution (status OK), Redirecionar ou Streaming (JSON, arquivo, etc).A Redirecionar-pós-PÓS padrão é implementado bem com a idéia de flash âmbito (3/4 a página para baixo).

Validação de formulários:Eu posso criar validador personalizado (ou escolher) e adicioná-lo para quase cada componente.3º-o partido bibliotecas têm conjuntos de costume ajax-validadores.Padrão de validadores de trabalho só depois que a página é submetida.Na verdade, eu não gosto de como a validação no JSF trabalha.Muita magia lá.Muitos componentes padrão (ou talvez todas) têm predefinidos, validação e é impossível para desativá-lo (Talvez nem sempre, mas eu encontrei muitos problemas com isso).

Listras permite a validação em anotações sobre as variáveis de instância no ActionBean.Eles permitem que alguns padrões, necessários, maxlength, etc.ou você sempre pode criar o seu próprio.O padrão é fácil de adicionar e flexível, ao passo que há sempre a possibilidade de se fazer algo completamente personalizado.

Ajax apoio:muitos de terceiros 3 bibliotecas (MyFaces, IceFaces, OpenFaces, AnotherPrefixFaces...) têm forte ajax apoio e funciona muito bem.Até você encontrar um problema.Muita magia lá também.É muito difícil para fazê-lo funcionar, se não funcionar, mas você fez certo, como é descrito no manual.

Este era o meu grande problema com o JSF maneira de fazer as coisas.Mesmo se você não receba o widget para a direita, você ainda está preso com QUE o widget.Com Listras, você pode usar o que melhor e mais recente do Jquery tem para oferecer, e contanto que você enviar o direito GET ou POST para o servidor, listras sabe o que fazer com ela e pode facilmente enviar JSON de volta.Eu acho estruturas de componente caber um nicho de alguns anos atrás, muito melhor quando o AJAX foi difícil, mas JQ torna tão fácil agora.

User-friendly URLs:as pessoas dizem que existem algumas bibliotecas que existem.E isso pode ser feito com filtros de bem.Mas eu nunca tentei.Parece muito complexo para o primeiro olhar.

@UrlBinding, é tão fácil como isso.

Outras dicas

Minha resposta não é a que você deseja ouvir: não mude da estrutura de componente para a estrutura de ação

Eu mudei o contrário após muitos anos de desenvolvimento da estrutura de ação e nunca vou voltar.

Dos 8 casos de uso que você mencionou, apenas um vem à mente onde as estruturas de ação são obviamente melhores, e esse é o design de URL / URLs amigáveis. Isso também pode ser feito em estruturas de componentes, mas muito mais fácil nas estruturas de ação (especialmente em listras em que você apenas anota seu ACTIONBEAN com o URL).

Eu aconselho você a experimentar o wicket, é muito fácil de aprender (muito mais fácil que o JSF) e permite reutilizar muitos componentes existentes também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top