Integração Vaadin e Spring MVC
-
19-09-2019 - |
Pergunta
Estou pensando na possibilidade de usar o Spring MVC com a estrutura Vaadin. Existem maneiras documentadas de fazê -los jogar bem juntos? Também é uma boa ideia usá -los juntos? relacionado ao desempenho; Vou executar o aplicativo em um servidor dedicado.
Para tornar minha pergunta um pouco mais clara, como posso devolver um ModelAndView de um controlador MVC de primavera que renderiza usando o Vaadin e pode acessar todos os dados do modelo.
Solução
O apoio à primavera para Vaadin é bastante novo, mas recentemente houve muita conversa sobre isso no fórum e alguns o testaram. Parece funcionar. Há um artigo sobre o Vaadin Wiki sobre isso, e alguns tópicos no fórum falando sobre a integração Vaadin + Spring:
Wiki: integração da primavera
Fórum: o kit de ferramentas para moinho pode ser integrado ao aplicativo Spring
Fórum: Problema de integração da primavera
Fórum: Trabalhando com a primavera
Fórum: integração da primavera
Outras dicas
Não tenho certeza se é uma opção prudente integrar o Vaadin ao MVC da primavera. É um desperdício. O MVC destina -se a aplicativos web típicos baseados em páginas, onde o Vaadin é mais baseado no estado baseado em um aplicativo de desktop. Normalmente, eu fazia um encontro no meio e fazia minha camada de negócios e camada de acesso a dados na primavera e usava o Vaadin como está.
Ver este tópico no fórum Vaadin para o meu AutowiringApplicationServlet
Solução, incluindo uma amostra de aplicação de guerra.
concordou com Dhrbo.
Não é aconselhável usar o Spring MVC, mais ainda com o Webflow com o Vaadin. Vaadin é outra estrutura da Web-App.
Se você deseja a idéia de "Spring MVC" em seu projeto Vaadin, integra-o com o núcleo de primavera, feijão e contexto. Dessa forma, você pode obter uma separação clara entre controladores, interface do usuário (Vaadin) e modelos (integrar -se ao hibernato / orms)
Aqui está um artigo sobre a integração da camada de serviço de primavera com Vaadin. Ele não se relaciona diretamente com o Spring MVC sobre o qual se tratava da questão original, mas ainda pode ser um ponteiro para outros leitores pesquisando a integração de Vaadin Spring.
http://psponcoding.blogspot.com/2011/03/vaadin-spring-integration.html
org.springframework.web.servlet.mvc.Controller
'S Handlerequest leva um HttpServletRequest
e HttpServletResponse
como parâmetros. Destes, você não pode processar o fragmento de URI. Como tal, o controlador não é adequado para controlar solicitações com base no fragmento URI.
No meu aplicativo, implementei conceito muito semelhante ao controlador de primavera. Meu aplicativo ainda tem uma noção de "visualizações" e "modelo". Cada visualização é implementada em uma classe separada e é exibida em um bloco central da página. Eu queria centralizar a lógica do processamento de URL para essa classe, então criei uma classe AbstractControllerEntry
:
public static abstract class AbstractControllerEntry {
public abstract boolean matches(String fragment);
public abstract void open(MainWindow window, String fragment);
}
com várias subclasses de conveniência, como ConstantEntry
, PrefixEntry
e RegexEntry
.
Cada classe de visualização tem um método estático, que retorna AbstractControllerEntry
. A coleção de todas as entradas é mantida em uma matriz estática dentro de MyController
classe (não um controlador MVC de primavera). Após a mudança de fragmento (ver Urifragmentutilidade), Eu itero todas as entradas e, para primeiro, que corresponde, chamarei o Open. Qualquer outra lógica, como encontrar o objeto modelo, está dentro da classe de visualização, no AbstractControllerEntry
implementação.
Além disso, há outro método estático para gerar o fragmento de URI na classe View, para que cada referência a uma visualização seja uma referência real a uma classe, essa é uma solução para os links quebrados. E cada visualização tem o método da instância para obter um fragmento para a visualização atual, que é verificada para corresponder a uma entrada do controlador para aumentar a robustez.