Modelo MVP com GWT ?

58 views
Skip to first unread message

Fernando Paiva

unread,
Oct 7, 2013, 2:00:36 PM10/7/13
to gwt-b...@googlegroups.com
Salve galera... 

Seguinte, gostaria de saber através de um exemplo simples como funciona o padrão de desenvolvimento MVP usando o GWT ?

Tenho a seguinte tela:

[code]
package com.agenda.project.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.RootPanel;

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Main implements EntryPoint {
private Button clickMeButton;
public void onModuleLoad() {
RootPanel rootPanel = RootPanel.get();

clickMeButton = new Button();
rootPanel.add(clickMeButton, 183, 102);
clickMeButton.setText("Click me!");
clickMeButton.addClickHandler(new ClickHandler(){
public void onClick(ClickEvent event) {
Window.alert("Hello, GWT World!");
}
});
}
}
[/code]

Como seria usar um modelo MVP com esta tela ?

obrigado







Victor Pinto

unread,
Oct 8, 2013, 9:17:26 AM10/8/13
to gwt-b...@googlegroups.com
Fernando, 
   acho que a sua pergunta não ficou muito clara. 
   Ai só tem apresentação e gerenciamento de ação do usuário. Não tem nenhuma entidade para ser a parte modelo.


[]'s
Victor Pinto A. de Oliveira


--
Você está recebendo esta mensagem porque se inscreveu no grupo "GWT Google Web Toolkit Brasil" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para gwt-brasil+...@googlegroups.com.
Para postar neste grupo, envie um e-mail para gwt-b...@googlegroups.com.
Visite este grupo em http://groups.google.com/group/gwt-brasil.
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

Fernando Paiva

unread,
Oct 8, 2013, 9:54:40 AM10/8/13
to gwt-b...@googlegroups.com
Victor, 

A pergunta parte do pressuposto desta classe simples com um rootpanel e button, como eu adaptaria ela pra trabalhar nos padrões MVP, como seria isso ?
Este livro aborda desenvolvimento com MVP ?

obrigado

--
      Fernando Paiva
      Java/PHP Developer
   Indústria de Botões Guaíra

Carlos Eduardo

unread,
Oct 8, 2013, 9:56:38 AM10/8/13
to gwt-b...@googlegroups.com


--
Carlos Eduardo Simões Pelegrin

Diogo Longo

unread,
Oct 9, 2013, 2:49:59 PM10/9/13
to gwt-b...@googlegroups.com
O modelo mvp creio que não muda, porém montar ele na raça é muito complicado, o próprio google disponibiliza um exemplo (mvp-architecture), porém para manter desta maneira é praticamente impossível para um projeto grande, aconselho você usar um framework, eu já utilizei o GWTP https://gwtp.arcbees.com/ e recomendo, está em constante evolução e qualquer dúvida o fórum ajuda. Eles tem uma aplicação de exemplo também. GWTP-Samples

Fernando Paiva

unread,
Oct 10, 2013, 8:35:13 AM10/10/13
to gwt-b...@googlegroups.com
Opa Diogo, 

Nunca trabalhei com esse tipo de framework, nem msm pra MVC, como funciona esse framework GWTP ?

obrigado

Fernando Paiva

unread,
Oct 12, 2013, 9:07:05 PM10/12/13
to gwt-b...@googlegroups.com
Bom galera, depois de muuuuito pesquisar e nao conseguir nenhuma resposta q me ajudasse realmente, acho q consegui fazer o esquema com MVP e UiBinder.

aqui vai como fiz.

[code]

<!-- Hello World Componentes ->
<?xml version="1.0" encoding="UTF-8"?>
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
</ui:style>

<g:HTMLPanel>
<g:FlowPanel>
<g:TextBox ui:field="txtBoxEntrada"></g:TextBox>
<g:Button ui:field="btnOk" text="Ok"></g:Button>
</g:FlowPanel>
<g:Label ui:field="labelHello"></g:Label>
</g:HTMLPanel>
</ui:UiBinder>

// aqui minha View
public class HelloWorldView extends Composite {
public interface Presenter{
void onEntradaEditada(String entrada);
}
@UiField
protected TextBox txtBoxEntrada;
@UiField
protected Button btnOk;
@UiField
protected Label labelHello;
private Presenter presenter;
private static PainelControlesUiBinder uiBinder = GWT.create(PainelControlesUiBinder.class);
@UiTemplate("HelloWorld.ui.xml")
interface PainelControlesUiBinder extends UiBinder<Widget, HelloWorldView>{}
public HelloWorldView(){
initWidget(uiBinder.createAndBindUi(this));
}
public void setPresenter(Presenter p){
this.presenter = p;
}
@UiHandler("btnOk")
public void onButtonOkClick(ClickEvent e){
fireEntradaEditada();
}
@UiHandler("txtBoxEntrada")
public void onEnterPressionado(KeyDownEvent e){
if(e.getNativeKeyCode() == KeyCodes.KEY_ENTER){
e.preventDefault();
fireEntradaEditada();
}
}
private void fireEntradaEditada(){
this.presenter.onEntradaEditada(txtBoxEntrada.getText());
}
public void setSaida(String texto){
labelHello.setText(texto);
}
public void setEntrada(String texto){
txtBoxEntrada.setText(texto);
}
}


//aqui meu Presenter 
public class HelloWorldPresenter implements HelloWorldView.Presenter {
private HelloWorldView view;
public HelloWorldPresenter(HelloWorldView view){
this.view = view;
this.view.setPresenter(this);
this.view.setEntrada("");
this.view.setSaida("Hello World");
}

@Override
public void onEntradaEditada(String entrada) {
this.view.setEntrada("");
if(!entrada.isEmpty()){
this.view.setSaida("Hello: " + entrada);
}
}
}


//aqui meu EntryPoint
public class Main implements EntryPoint{

@Override
public void onModuleLoad() {
HelloWorldView view = new HelloWorldView();
HelloWorldPresenter presenter = new HelloWorldPresenter(view);
RootPanel.get().add(view);
}
}

[/code]

Tudo funcionando, nao sei se seria essa a forma correta de trabalhar com MVP mas foi o q consegui chegar depois de muuuita pesquisa.

Qualquer dica será sempre bem vinda

obrigado
Reply all
Reply to author
Forward
0 new messages