2009-05-30 18 views
9

मेरे पास एक ही मॉड्यूल में एकाधिक प्रविष्टि बिंदु हैं।एक ही मॉड्यूल में एकाधिक प्रविष्टि अंक के साथ समस्या

उदाहरण के लिए मेरे पास होम पेज के लिए होम एंट्री पॉइंट और व्यवस्थापक पृष्ठ के लिए एडमिन एंट्री पॉइंट है।

<entry-point class='com.company.project.client.HomeModule'/> 
<entry-point class='com.company.project.client.AdminModule'/> 

तरह से मैं अब सेटअप कर रहा हूँ - मैं अपने OnModuleLoad में इस तरह somt जांच करने की आवश्यकता:

if((RootPanel.get("someHomeWidget")!=null)&& 
    (RootPanel.get("someOtherHomeWidget")!=null)) 
{ 
    // do the stuff 
} 

के लिए Admin Entrypoint निष्पादित करने के लिए नहीं है जब घर पेज खुला हो जाता है और दूसरी तरफ।

उपर्युक्त चेक नहीं कर रहा है, इसमें यह भी शामिल है कि अगर के साथ मेरे पास में इंजेक्शन देने वाले होम और एडमिन पेज दोनों में एक ही नाम है, तो यह उनमें से प्रत्येक पर दो बार दिखाई देता है।

यह 1000 मील दूर है और स्पष्ट रूप से गलत है: लोगों के अनुभव में ऐसा करने के लिए सही तरीका क्या है?

किसी भी मदद की सराहना की!

RootPanel panel = RootPanel.get("someHomeWidget"); 
if (panel) panel.add(new HomeWidget()); 

panel = RootPanel.get("adminWidget"); 
if (panel) panel.add(new AdminWidget()); 

इस तरह यह सिर्फ पेज किसी भी divs आप की तलाश में स्कैन करता है और सम्मिलित करता है:

उत्तर

8

सही तरीका है कि चिपक उचित divs में उपयुक्त विगेट्स, मॉड्यूल प्रति एक एकल प्रवेश बिंदु है उचित विजेट तो आपका एचटीएमएल पेज निर्धारित करता है कि जीडब्ल्यूटी कोड किसी भी स्थिति को संभालने के लिए तैयार होने पर कौन से विजेट प्रदर्शित होते हैं। उपरोक्त के बारे में कुछ भी नहीं है जो बदबू आ रही है, वैसे ही आपका प्रवेश बिंदु लिखा जाना चाहिए।

विकल्प यह है कि यदि आपका व्यवस्थापक क्षेत्र और सामान्य क्षेत्र पूरी तरह से अलग है (उदाहरण: आप उन्हें अलग-अलग समय पर लोड करना चाहते हैं) तो अलग-अलग प्रविष्टि बिंदुओं के साथ, अलग मॉड्यूल होना चाहिए।

+0

मेरे मामले में होम पेज और व्यवस्थापक पृष्ठ को अलग-अलग समय पर लोड करने की आवश्यकता है (वे अलग-अलग पेज हैं!) - इसलिए एक एकल प्रविष्टि बिंदु के साथ भी यह divs नहीं मिलेगा और यह अपवाद फेंक देगा। दूसरी तरफ, विभिन्न मॉड्यूल का उपयोग करने के बारे में क्या स्पष्ट नहीं है यह है कि कॉन्फ़िगर कैसे करें कि किस पृष्ठ से आग लगनी चाहिए। – JohnIdol

+1

यह divs क्यों नहीं मिलेगा? आपको एहसास है कि आप जितना चाहें उतने पृष्ठों पर जीडब्ल्यूटी के लिए जावास्क्रिप्ट आयात डाल सकते हैं। तो आप इसे अपने व्यवस्थापक पृष्ठ पर रखेंगे और व्यवस्थापक div को पृष्ठ के नीचे आगे बढ़ाएंगे। फिर आप इसे सामान्य पृष्ठ पर भी डाल देंगे और सामान्य div को पृष्ठ के नीचे आगे बढ़ाएंगे। यदि आपके पास दूसरी ओर कई मॉड्यूल हैं, तो आप जिस पृष्ठ पर चाहते हैं उस मॉड्यूल के लिए जावास्क्रिप्ट आयात शामिल करें, यह वास्तव में बहुत आसान है। – rustyshelf

+0

यह एक अच्छा समाधान है। – Feargal

1

व्यवस्थापक और होम पेज को विभिन्न पृष्ठों के रूप में नहीं मानें। पृष्ठों की अवधारणा जीडब्ल्यूटी पर लागू नहीं है, क्योंकि केवल एक ही पृष्ठ है, यानी एकल प्रविष्टि बिंदु। यदि आप विभिन्न पृष्ठों का प्रभाव देना चाहते हैं, तो जीडब्ल्यूटी की यूआरएल पुनर्लेखन सुविधाओं का उपयोग करें।

यदि आप विभिन्न एंट्रीपॉइंट्स का उपयोग करना चाहते हैं, तो उपर्युक्त टिप्पणी में कहा गया है, तो विभिन्न मॉड्यूल का उपयोग करें।

+0

धन्यवाद - मैं यूआरएल रिवाइटिंग से बहुत परिचित नहीं हूं (क्या आप कुछ लिंक प्रदान कर सकते हैं?) - इस और एकाधिक मॉड्यूल के बीच वैसे भी सबसे अच्छा तरीका क्या है? एक परिदृश्य में जैसे कि आप वर्णन करते हैं, कई प्रविष्टियों को परिभाषित करने के लिए पहली जगह क्यों संभव है? क्या आप कह रहे हैं कि एक ही मॉड्यूल में एकाधिक प्रविष्टि का उपयोग कभी नहीं किया जाना चाहिए? – JohnIdol

+0

हाय जॉन, यूआरएल पुनर्लेखन के लिए, मैं आपको जीडब्ल्यूटी में पूरे इतिहास से संबंधित सामानों के माध्यम से जाने का सुझाव देता हूं। मॉड्यूल आधारित चीजों के लिए एकाधिक प्रविष्टि बिंदु - कई बार, विशेष रूप से एंटरप्राइज़ अनुप्रयोगों के लिए, आप मॉड्यूल के सेट को तैनात करना चाहते हैं और क्लाइंट द्वारा खरीदे गए मॉड्यूल के आधार पर मॉड्यूल के अन्य सेट को तैनात नहीं करना चाहते हैं। यह मॉड्यूल की मूल अवधारणा है। प्रत्येक मॉड्यूल, एक अलग प्रवेश बिंदु रखते हुए, ऐप की एक अलग तैनाती इकाई है। एकल मॉड्यूल में एकाधिक प्रविष्टि बिंदु, तकनीकी और व्यापार परिप्रेक्ष्य से मुझे समझ में नहीं आता है। – sbidwai

1

आमतौर पर केवल एक एंट्रीपॉइंट होना बेहतर होता है। एक मॉड्यूल में एकाधिक प्रविष्टि बिंदु एक ही समय में शुरू होते हैं और कभी-कभी ऐसी चीजें कर सकते हैं जिनकी आप अपेक्षा नहीं करते थे।

आपके पास इसे अलग से संभालने के तरीके में बहुत सारे विकल्प हैं: - व्यवस्थापक के लिए 2 अलग-अलग संकलन और होम एप्लिकेशन के लिए एक है। - यह इंगित करने के लिए इतिहास टोकन का उपयोग करें कि आप व्यवस्थापक या होम चाहते हैं - एक या अन्य दिखाने के लिए जेएस चर की जांच करें - व्यवस्थापक या होम (रूटपेनल.get (आईडी)) दिखाने के लिए एक विशिष्ट DIV आईडी की उपस्थिति की जांच करें - एप्लिकेशन को इंगित करने के लिए यूआरएल पैरामीटर का प्रयोग करें। - ... आदि

+0

एक ही समय में शुरू होने वाले एकाधिक प्रविष्टि बिंदुओं के बारे में आपकी टिप्पणी वह है जो मैं अनुभव कर रहा हूं क्योंकि मैं मूल एप्लिकेशन को पैकेज करने और इसे विस्तारित करने का प्रयास करता हूं। मेरे संदेह की पुष्टि करने के लिए धन्यवाद कि प्रवेश बिंदु को कई बार क्यों कहा जा सकता है। – Stevko

0

मेरे पास मेरे ब्लॉग पर इसका समाधान है। आप एक नमूना मेवेन प्रोजेक्ट डाउनलोड कर सकते हैं जिसमें एकाधिक प्रविष्टि बिंदु हैं और यूआरएल-रीराइटिंग का उपयोग करता है।एक नज़र डालें: http://zenoconsulting.wikidot.com/blog:16

4

मैं भी एक जीडब्ल्यूटी खिलौना ऐप में एकाधिक पृष्ठों का उपयोग करना चाहता था और मुझे लगता है कि मैंने इसे समझ लिया। इसमें तैनाती वर्णनकर्ता (myApp.gwt.xml) की कुछ मालिश हुई, लेकिन यहां मैंने जो किया है।

  • एंट्रीपॉइंट को लागू करने वाली एक और कक्षा बनाई और कुछ कोड जो केवल नए पृष्ठ में div में जोड़े गए।
  • मूल gwt.xml कॉपी किया गया और दो चीजें बदल:
    • मॉड्यूल-नाम बदलने करने - मैं "anothergwtapp" में बदल
    • प्रवेश बिंदु नया वर्ग निर्दिष्ट।
  • जब मैं प्रोजेक्ट संकलित करता हूं, तो "युद्ध" फ़ोल्डर में एक और निर्देशिका है (इसके लिए प्रतीक्षा करें ...) "anothergwtapp"। इसमें "anothergwtapp.nocache.js" शामिल है जो कि जीडब्ल्यूटी जादू है।
  • अंत में, मैंने मूल HTML पृष्ठ की प्रतिलिपि बनाई और "stockwatcher/stockwatcher.nocache.js" को "anothergwtapp/anothergwtapp.nocache.js" के साथ बदल दिया "(हाँ, मैं बहुत नया हूं - ट्यूटोरियल अभी भी मेरी मशीन पर है)
    • मैंने नए HTML को थोड़ा अलग करने के लिए बदल दिया (नए प्रविष्टि बिंदु के आउटलोड के लिए नए divs) और मैंने पहले पृष्ठ में नए पृष्ठ पर एक साधारण href जोड़ा।

यह काम किया। बस gwt.xml को डुप्लिकेट करें और नए ऐप पेज के साथ मॉड्यूल के लिए एक नया नाम प्रदान करें। मैंने कुछ अन्य लिंक देखे और मैंने वास्तव में वर्णन किया था कि क्या किया गया था, लेकिन बहुत सारे शब्द और रीडायरेक्ट थे और ऐसे (यानी मैंने वास्तव में कुछ भी नहीं पढ़ा)। मैं गैलीलियो के लिए नवीनतम जीडब्ल्यूटी प्लगइन का उपयोग कर रहा हूं इसलिए शायद आईजेडब्ल्यू।

+0

मैं इसे ढूंढ रहा हूं! धन्यवाद। – McTrafik

1

एक सरल (मुश्किल) जिस तरह से इस लक्ष्य को हासिल करने के लिए नहीं है:

एक मुख्य वर्ग आपका प्रवेश बिंदु बनाओ।

package com.example.client; 

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

public class Main implements EntryPoint { 

    public void onModuleLoad() { 

    String url = Window.Location.getHref(); 
    if (url.indexOf("?install")>-1) { 
     Install install = Install.getInstance(); 
     RootPanel.get().add(install);  
    else if (url.indexOf("?admin")>-1) { 
     Admin admin = Admin.getInstance(); 
     RootPanel.get().add(admin);  
    } else { 
     Application app = Application.getInstance(); 
     RootPanel.get().add(app);  
    } 
    } 
} 

अब विभिन्न वर्गों आवेदन, व्यवस्थापक और काम अलग इकाइयों की तरह स्थापित करें:

<module rename-to='gwt'> 
    <inherits name='com.google.gwt.user.User'/> 
    <entry-point class='com.example.client.Main'/> 
    <source path='client'/> 
    <source path='shared'/> 
</module>;<br/> 

एक डिस्पैचर की तरह काम करने के लिए इस Main.java बनाएँ।

यहाँ एक सरल स्थापित करें उदाहरण के लिए है:

package comexample.client; 

import com.google.gwt.user.client.ui.FlowPanel; 
import com.google.gwt.user.client.ui.HTML; 

public class Install extends FlowPanel { 

    /** Singleton stuff - to access Main from all subclasses! */ 
    private static Install singelton; 
    public static Install getInstance() { 
    if (singelton == null) {singelton = new Install();} 
    return singelton; 
    } 

    /** Constructor - called by Main.onModuleLoad() */ 
    private Install() { 
    this.add(new HTML("<h1>Do whatever You have to do!</h1>")); 
    } 
} 

आप सिंगलटन सामान (getInstance) की जरूरत नहीं है, लेकिन यह बड़ा अनुप्रयोगों में बहुत आसान है।

अब/युद्ध निर्देशिका में स्थापित नामित निर्देशिका और व्यवस्थापक बना सकते हैं और उनमें से बहुत में इस तरह एक HTML पृष्ठ बनाने के लिए: तो जब उपयोगकर्ता http://www.example.com/install वह पुनः निर्देशित किया जाएगा करने के लिए अपने Brower निर्देशन

<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="refresh" content="0; URL=/index.html?install"> 
</head> 
<body></body> 
</html> 

http://www.example.com/index?install और index.html Main.java से जुड़ा हुआ है जो अनुरोध प्रेषित करेगा और इंस्टॉल लोड करेगा।जावा

संबंधित मुद्दे