2009-04-13 2 views
19

के लिए सबसे अच्छा तरीका क्या है GWT ऐप में HTML की बड़ी मात्रा को बाहरी करें? हमारे पास लगभग 30 "पृष्ठों" का एक जटिल GWT ऐप है; प्रत्येक पृष्ठ में नीचे एक गाइड है जो HTML मार्कअप के कई पैराग्राफ हैं। मैं HTML को बाहरी बनाना चाहता हूं ताकि यह यथासंभव "अनचाहे" के रूप में रह सके।जीडब्ल्यूटी ऐप्स में एचटीएमएल को बाहरी करने का सबसे अच्छा तरीका?

मुझे पता है और समझते हैं कि संपत्ति फ़ाइलों का उपयोग कैसे करें जीडब्ल्यूटी में; कि निश्चित रूप से जावा वर्गों में सामग्री एम्बेड की तुलना में बेहतर है, लेकिन अभी भी एक तरह से बदसूरत HTML के लिए

आम तौर पर इस बात की तरह आप में डाल दिया जाता है (तुम सब कुछ है, साथ ही भागने उद्धरण, आदि backslashify करने की जरूरत है) एक जेएसपी, लेकिन मुझे जीडब्ल्यूटी में इसके बराबर नहीं दिखता है। मैं सिर्फ एक विजेट लिखने पर विचार कर रहा हूं जो सर्वर पर एचटीएमएल फाइलों से सामग्री लाएगा और फिर HTML विजेट में टेक्स्ट जोड़ देगा। लेकिन ऐसा लगता है कि एक आसान तरीका होना चाहिए।

+1

यह मुझे लगता है कि आप बस गलत तरीके से जीडब्ल्यूटी का उपयोग कर रहे हैं। जीडब्ल्यूटी ऐप में "एचटीएमएल की बड़ी मात्रा" नहीं होनी चाहिए। मैंने एक * सैकड़ों * जीडब्ल्यूटी स्क्रीन के साथ काम किया, और हमारे पास लगभग कोई HTML मार्कअप नहीं था (या तो जावा कोड में या जीडब्ल्यूटी होस्ट पेजों में)। वास्तविक HTML को जीडब्ल्यूटी कंपाइलर द्वारा जावा कोड से जेनरेट किए गए जावास्क्रिप्ट कोड द्वारा गतिशील रूप से उत्पादित किया गया था - यह सब के बाद, जीडब्ल्यूटी का पूरा बिंदु है। –

उत्तर

7

आप कुछ templating तंत्र का उपयोग कर सकते हैं। FreeMarker या Velocity टेम्पलेट्स आज़माएं। आपके पास एचटीएमएल फाइलों में फाइलें होंगी जो पुस्तकालयों को टेम्पलेट करके पुनर्प्राप्त की जाएंगी। इन फ़ाइलों को उचित एक्सटेंशन के साथ नामित किया जा सकता है, उदा। .html, .css, .js obsearvable अपने आप पर।

+1

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

+3

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

1

आप Generator को संकलित समय पर फ़ाइल से बाहरी HTML लोड करने और इसे निकालने वाली कक्षा बनाने के लिए कार्यान्वित करने का प्रयास कर सकते हैं। जेनरेटर बनाने के लिए ऑनलाइन बहुत मदद नहीं मिलती है लेकिन यहां जीडब्ल्यूटी समूह के लिए एक पोस्ट है जो आपको शुरू हो सकती है: GWT group on groups.google.com

1

मैं इसी तरह के शोध कर रहा था और अब तक, मुझे लगता है कि इस समस्या से संपर्क करने का सबसे अच्छा तरीका DeclarativeUI or UriBind के माध्यम से है। दुर्भाग्य से यह अभी भी इनक्यूबेटर में है, इसलिए हमें समस्या के आसपास काम करने की जरूरत है।

मैं अलग अलग तरीकों की जोड़ी में इसे हल:

  1. सक्रिय ओवरले, यानी .: आप अपने मानक HTML/CSS बना सकते हैं और <script> टैग के माध्यम से प्राप्त कोड इंजेक्षन।

    RootPanel.get("element-name").setVisible(false); 
    
  2. आप अपने कोड 100% GWT लिखना और फिर, अगर एक बड़ा एचटीएमएल हिस्सा की जरूरत है, आप इसे किसी के माध्यम से ग्राहक के लिए लाने के लिए: हर जगह आप आप कुछ इस तरह लिखने GWT कोड से एक तत्व का उपयोग करने की जरूरत है IFRAME या AJAX के माध्यम से और फिर इस तरह HTML पैनल के माध्यम से यह इंजेक्षन:

    String html = "<div id='one' " 
        + "style='border:3px dotted blue;'>" 
        + "</div><div id='two' " 
        + "style='border:3px dotted green;'" 
        + "></div>"; 
    HTMLPanel panel = new HTMLPanel(html); 
    panel.setSize("200px", "120px"); 
    panel.addStyleName("demo-panel"); 
    panel.add(new Button("Do Nothing"), "one"); 
    panel.add(new TextBox(), "two"); 
    RootPanel.get("demo").add(panel); 
    
+0

मुद्दा यह नहीं है कि HTML डेटा के लिए उपयोग करने के लिए विजेट क्या है; मुद्दा यह है कि कोड के HTML * आउट * को कैसे प्राप्त करें, और किसी .html फ़ाइल की तरह कुछ और प्राकृतिक में कैसे प्राप्त करें। –

+0

हाँ। ऊपर दिया गया उदाहरण यह नहीं दिखाना है कि एचटीएमएल को कोड में कैसे रखा जाए, लेकिन केवल यह दिखाने के लिए कि आप एचटीएमएल का संदर्भ दे सकते हैं जो आपके कोड के बाहर रहता है जिसे कई तरीकों से पैक किया जा सकता है। ऊपर दिए गए उदाहरण में यह एक स्ट्रिंग थी। उसी तरह आप यूआरएल के माध्यम से बाहरी फाइलों का संदर्भ दे सकते हैं। – IgorM

+1

HTML को एक फ़ाइल में रखें (*।एचटीएमएल अगर आप चाहते हैं), सर्वर पर फ़ाइल लोड करें और सामग्री को प्रदर्शित करने के लिए HTMLPanel() का उपयोग करें। –

5

मैं कहना चाहता हूँ कि तुम एक Frame के माध्यम से बाहरी एचटीएमएल लोड।

Frame frame = new Frame(); 
frame.setUrl(GWT.getModuleBase() + getCurrentPageHelp()); 
add(frame); 

आप getCurrentPageHelp के लिए कुछ सम्मेलन या देखने () उचित पथ पर लौटने के लिए व्यवस्था कर सकते हैं (जैसे: /manuals/myPage/help.html)

यहाँ में फ्रेम के एक example है कार्रवाई।

-2

जीडब्ल्यूटी नहीं जानते, लेकिन क्या आप अपने ऐप एचटीएमएल में डिवी टैग को परिभाषित और एंकर नहीं कर सकते हैं, फिर आपको आवश्यक HTML फाइलों के खिलाफ प्राप्त करने और div में शामिल करने के लिए निष्पादित कर सकते हैं? micro-template से यह कितना अलग होगा?

अद्यतन:

मैं सिर्फ यह अच्छा jQuery प्लगइन एक और StackOverflow प्रश्न का उत्तर में पाया।

+0

प्रश्नकर्ता एचटीएमएल लाने के लिए राउंड ट्रिप से बचने की इच्छा रखता है। असल में वे क्लाइंटबंडल का उपयोग कर ऐप के भीतर एस्केप किए गए पृष्ठों को एक स्ट्रिंग के रूप में एम्बेड करना चाहते हैं। –

0

आप पृष्ठ के HTML भागों के लिए jsps के साथ servlets का उपयोग कर सकते हैं और अभी भी पृष्ठ पर gwt ऐप चलाने के लिए आवश्यक जावास्क्रिप्ट शामिल कर सकते हैं।

1

क्यों पुराने पुराने IFRAME का उपयोग नहीं करना है? बस एक आईफ्रेम बनाएं जहां आप एक संकेत डालना चाहते हैं और जीडब्ल्यूटी 'पेज' में परिवर्तन करते समय अपना स्थान बदलना चाहते हैं।

लाभ:

  • हिट्स किसी भी संरचना के अलग पोषणीय HTML फ़ाइलों में जमा हो जाती
  • सर्वर साइड पर सभी में कोई कोडिंग के साथ AJAX शैली लोड हो रहा है
  • यदि आवश्यक हो, आवेदन अभी भी बातचीत कर सकता है भरी हुई जानकारी के साथ

नुकसान:

+०१२३५१६४१०६१
  • प्रत्येक संकेत फ़ाइल
  • हार्ड

अंतर्राष्ट्रीयकरण करने के लिए इस दृष्टिकोण थोड़ा बेहतर बनाने के लिए सामान्य रंग-और अनुभव के लिए साझा सीएसएस के लिए लिंक होना चाहिए, आप लोड हो रहा है त्रुटियों को संभाल सकता है और भाषा को डिफ़ॉल्ट पर अनुप्रेषित/404 त्रुटियों पर विषय। तो, खोज प्राथमिकता है कि तरह होगा:

  1. वर्तमान भाषा के लिए वर्तमान विषय
  2. डिफ़ॉल्ट भाषा के लिए
  3. वर्तमान विषय
  4. वर्तमान भाषा के लिए
  5. डिफ़ॉल्ट विषय
  6. डिफ़ॉल्ट त्रुटि पृष्ठ

मुझे लगता है कि iFrame इंटरैक्शन

+0

तो, आप अपने सर्वर पर इस तरह के फ़ाइल संरचना हो सकता है: /help/welcome/en.html या /help/welcome-en.html यह पेज विषय या GWT-पेज 'स्वागत' –

+0

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

3

GWT 2.0 रिलीज़ करने के लिए इस तरह के जीडब्ल्यूटी घटक को बनाने में काफी आसान है एस्ड, क्लाइंटबंडल होना चाहिए, जो शायद इस आवश्यकता को हल करता है।

1

जीडब्ल्यूटी पोर्टलेट ढांचे (http://code.google.com/p/gwtportlets/) में एक WebAppContentPortlet शामिल है। यह आपके वेब ऐप (स्थिर एचटीएमएल, जेएसपी इत्यादि) से किसी भी सामग्री को पूरा करता है। आप इसे अन्य पोर्टलों में अतिरिक्त कार्यक्षमता वाले पृष्ठ पर रख सकते हैं और पेज लोड होने पर सबकुछ एक एसिंक कॉल के साथ लाया जाता है।

WebAppContentPortlet और WebAppContentDataProvider के स्रोत को देखने के लिए देखें कि यह कैसे किया जाता है या ढांचे का उपयोग करने का प्रयास करें।

WebAppContentPortlet (क्लाइंट साइड)

((HasHTML)getWidget()).setHTML(html == null ? "<i>Web App Content</i>" : html); 

WebAppContentDataProvider (सर्वर साइड):: यहाँ स्रोत के प्रासंगिक बिट कर रहे हैं

HttpServletRequest servletRequest = req.getServletRequest(); 
String path = f.path.startsWith("/") ? f.path : "/" + f.path; 
RequestDispatcher rd = servletRequest.getRequestDispatcher(path); 
BufferedResponse res = new BufferedResponse(req.getServletResponse()); 
try { 
    rd.include(servletRequest, res); 
    res.getWriter().flush(); 
    f.html = new String(res.toByteArray(), res.getCharacterEncoding()); 
} catch (Exception e) { 
    log.error("Error including '" + path + "': " + e, e); 
    f.html = "Error including '" + path + 
     "'<br>(see server log for details)"; 
} 
0

मुझे यकीन है कि मैं अपने प्रश्न समझ में नहीं हूँ, लेकिन मैं ' मैं यह मानने जा रहा हूं कि आपने इस सामान्य सारांश को अपने स्वयं के विजेट में फैलाया है। यदि ऐसा है, तो समस्या यह है कि आपको जावा कोड में एचटीएमएल एम्बेड करने का बदसूरत तरीका पसंद नहीं है।

GWT 2.0 UiBinder, जो आप कच्चे HTMLish टेम्पलेट में जीयूआई को परिभाषित करने की अनुमति देता है, और आप जावा दुनिया से टेम्पलेट में मूल्यों इंजेक्षन कर सकते हैं। dev guide के माध्यम से पढ़ें और यह एक बहुत अच्छी रूपरेखा देता है।

0

आप एचटीएमएल टेम्पलेट्स के साथ GWT App को आजमा सकते हैं और रन-टाइम पर बाध्य नहीं कर सकते हैं, कोई संकलन-समय नहीं।

22

मैं एक ऐसी ही सेटिंग में ClientBundle का उपयोग किया है पर एक नजर डालें। मैं एक पैकेज my.resources बना लिया है और मेरी HTML दस्तावेज़ डाल दिया और वहाँ निम्नलिखित वर्ग:

HTML htmlPanel = new HTML(); 
String html = MyHtmlResources.INSTANCE.getIntroHtml().getText(); 
htmlPanel.setHTML(html); 
:

package my.resources; 

import com.google.gwt.core.client.GWT; 
import com.google.gwt.resources.client.ClientBundle; 
import com.google.gwt.resources.client.TextResource; 

public interface MyHtmlResources extends ClientBundle { 
public static final MyHtmlResources INSTANCE = GWT.create(MyHtmlResources.class); 

@Source("intro.html") 
public TextResource getIntroHtml(); 

} 

तब मैं अपने GWT ग्राहक कोड से निम्नलिखित को फोन करके उस फ़ाइल की सामग्री प्राप्त

अधिक जानकारी के लिए http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html देखें।

+0

यह वही है जो मैं ढूंढ रहा था। धन्यवाद, @ फ़ुटज़िलोगिक! हालांकि, किसी कारण से, मेरे "intro.html" के अंदर की स्क्रिप्ट नहीं चलती हैं, भले ही यह एक साधारण ' '। किसी भी कारण से आप सोच सकते हैं कि काम नहीं करना चाहिए? – Eric

5

जीडब्ल्यूटी 2.0 में, आप इसे UiBinder का उपयोग करके कर सकते हैं।

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'> 
    <div> 
    Hello, <span ui:field='nameSpan’/>, this is just good ‘ol HTML. 
    </div> 
</ui:UiBinder> 

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

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