2010-11-20 7 views
2

Bilmem gerekenler (GWT kullanarak), bazılarının yerine bazı sınıfların HTTP GET değerine göre yüklenme stratejisi.GWT - Bir değer nasıl alınır ve hangi sayfanın yükleneceğine karar verir

Örnek:

// Main.gwt.xml 
<?xml version="1.0" encoding="UTF-8"?> 

<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.7.0//EN" "http://google-web-toolkit.googlecode.com/svn/tags/1.7.0/distro-source/core/src/gwt-module.dtd"> 

<module> 
    <inherits name="com.google.gwt.user.User"/> 
    <entry-point class="org.sinfonet.client.PageLoader"/> 
</module> 

// PageLoader 
package org.sinfonet.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.ui.FlowPanel; 
import com.google.gwt.user.client.ui.RootPanel; 

public class PageLoader implements EntryPoint { 
    public void onModuleLoad() { 
     FlowPanel pageloader=new FlowPanel(); 
     pageloader.add(new MainHomePage()); 
     RootPanel.get().add(pageloader); 
    } 
} 

benim GEThttp://localhost:8084/GWT/index.html ise, ben MainHomePage() yüklemek istiyorum;

Diğerleri, benim GET benim http://localhost:8084/GWT/index.html?page=2 ise, MainAnotherClass();

Bunu PageLoader sınıfında, XML'de mi, yoksa nerede uygulamalıyım? Ben xml düşünüyorum, çünkü PageLoader bir istemci tarafı sınıf ... burada bir karar almak için bir yol yoktur.

P.S. Başka bir sayfa (diğer ad, başka bir ana sınıf) yüklemek istiyorum, dinamik olarak yüklemiyorum.

ÖRNEK I this çözümün Chris Boesing için, i gerekenleri yapmak kod kolay bir parça buldum

Teşekkür TRIED. Talihsiz bir şey yanlıştır, çünkü .clear() yöntemini çağırır, ancak yeni kapsayıcımı eklemez. Bu şu kod:

public class PageLoader implements EntryPoint, ValueChangeHandler<String> { 
    private FlowPanel pageloader; 
    private GWTServiceAsync rpcService; 

    public void onModuleLoad() { 
     pageloader=new FlowPanel(); 
     rpcService=GWT.create(GWTService.class); 
     pageloader.add(new HomepageContext(rpcService)); 
     RootPanel.get().add(pageloader); 

     History.addValueChangeHandler(this); 
     if(!History.getToken().isEmpty()){ 
      changePage(History.getToken()); 
     } 
    } 

    public void onValueChange(ValueChangeEvent event) { 
     changePage(History.getToken()); 
    } 

    public void changePage(String token) { 
     if(History.getToken().equals("apartment")) { 
      pageloader.clear(); 
      pageloader.add(new ApartmentContext(rpcService)); 
     } else { 
      pageloader.clear(); 
      pageloader.add(new HomepageContext(rpcService)); 
     } 
    }  
} 

Neyin var?

+0

Ben servlet konteyner URL'sini temel yüklemesi yapmak hangi sayfasını seçer programı olduğuna inanıyoruz. Bunun mümkün olup olmadığını bile bilmiyorum ama hangi sunucuyu kullandığınıza bağlı olacak? Tomcat kullanıyor musun? GAE'nin? JBoss? – Pace

+0

Tomcat :) Ama GWT'de ana sunucu hangisi? Ben doğrudan GWT ile yönetemez düşünüyorum, ya da belki ben bilmiyorum ... – markzzz

cevap

2

Bunu yapmak için önce gwt uygulamanıza hizmet vermek için bir sunucu uygulaması (statik html sayfası yerine) eklemelisiniz.

İlk adım, geçerli statik html sayfasını gwt iframe ile döndüren bir sunucu uygulaması eklemek olabilir. Ayrıca, web.xml’nizi de değiştirmeniz gerekiyor. İkinci adım, bir gwt modülünü veya diğerini göstermek için, döndürülen html'yi url'ye göre değiştirmektir. URL'ye göre 2 farklı gwt uygulaması (aka modülleri) göstermek istiyorsanız, bu tek çözümdür.

Neyse, sorunuzu anladıysam, ne yapmak istediğiniz, url'yi kullanarak farklı verileri göstermektir, bunun için başka bir çözüm öneririm: # işaretini kullanın.

Bu sözdizimi ile GWT'nin farklı sayfaları (tek bir GWT modülünde) göstermesi çok kolaydır. http://localhost:8084/GWT/index.html http: // localhost: 8084/GWT/index.html # page = 2 http://localhost:8084/GWT/index.html#searchFor=foo vb GWT belgelerinde Olaylar ve Tarih

bakış. Bu aynı zamanda RESTish adresler için çok iyi bir başlangıç ​​noktasıdır. I)> Bir ValueChangeHandler < Dize uygulamak ve Tarihi (History.addValueChangeHandler (changeHandler çalışmak isteyeceksiniz düşünüyorum http://code.google.com/webtoolkit/articles/mvp-architecture.html

+0

Uhm ... ben bu makaleleri iyi anlamak varsa bilmiyorum ... ama ihtiyacım olan şey olduğunu düşünmüyorum! GET değerini aldığımda yeni bir "sayfa" yüklemem gerekiyor (bunun yerine başkalarını yükledim). Sanırım GWT'de bu mümkün değil mi? Aslında, eski web uygulaması onayında yer alan swith sayfası gibi içeriği değiştirmek istiyorum. (Index.php yerine load.php yerine, ne demek istediğimi anlıyor musunuz?). Ama bunu düşünmek zorundayım çünkü belki de GWT kendi metodolojisini daha iyi kullanmaktadır :) – markzzz

+0

Gwt'de "sayfa" yoktur, teknik olarak tüm gwt uygulaması tek sayfadır, başka bir sayfa eklemek başka bir gwt uygulaması eklemektir (farklı bir giriş noktasına sahip bir modül). Yanıtın ilk bölümünde belirttiğim şey buydu. – Uberto

+1

Sadece şu andaki sayfayı değiştirmek istemediğini düşünüyorum. Bunu yapmak için sadece sayfa DOM'da çalışmanız gerekir. özel geçersiz yüklemeWelcomeView() { final Etiket welcomeMsg = new Etiket ("welcome"); welcomeMsg.addStyleName ("welcomeMsg"); RootPanel.get(). Clear(); RootPanel.get(). Add (welcomeMsg); } Örneğin, bu kod sayfadaki her şeyi kaldıracak ve etiketle değiştirecektir. Kullanıcı bir düğmeyi tıklattığında veya bir URL eklediğinde (GWT Geçmişi ve Olayları'na bakın) – Uberto

3

Daha sonra, valuechangehandler uygulamasında talep edilen jetonu alabilir ve gösterilecek görünümü seçebilirsiniz.

umut bu yardımcı olur :)

+0

Evet. Aslında bu benim günümü http://developerlife.com/tutorials/?p=232 :) – markzzz

+0

Uhm yapar.Bu onaylama benim için çok açık değil. Bu yüzden bir örnek ekledim, belki bana yardım edebilirsin, eğer zamanın ve hastasın varsa :) çabalarınız için teşekkürler! – markzzz

+0

çözüldü! yine de teşekkürler :) – markzzz

İlgili konular