2012-09-26 16 views
5

मैं एक जेएसएफ 2 अजाक्स एप्लिकेशन को बनाए रख रहा हूं और हम सभी कार्यों के लिए h:commandLinks और f:ajax टैग का उपयोग कर रहे हैं - हमेशा केवल आवश्यकतानुसार पुनः प्रस्तुत करना।h: commandLink की मानक href = "#" विशेषता को कैसे बदलें?

यह जब लिंक पर राइट क्लिक प्रदर्शन और "नए टैब में खोलें लिंक" आदि चुनने निश्चित रूप से उपयोगकर्ता के लिए अपेक्षित व्यवहार तोड़ करता

मैं समझता हूँ कि च: ajax बलों के href गुण परिणामी a तत्व # होने के लिए और ऑनक्लिक फ़ंक्शन में सभी जादू पोस्ट अनुरोध ट्रिकरी करता है - अब मैं परिणामी <a> टैग के href विशेषता में कुछ सार्थक लिंक डालकर "ओपन लिंक ..." कार्रवाई के लिए फ़ॉलबैक समर्थन प्रदान करना चाहता हूं ।

यह "सामान्य" ऑनक्लिक व्यवहार को तोड़ नहीं देगा क्योंकि जेनरेट जावास्क्रिप्ट हमेशा return false; के साथ समाप्त होता है लेकिन मुझे एक सामान्य विंडो अनुरोध के जरिए अपने उपयोगकर्ताओं को सामान्य जीईटी अनुरोध का उपयोग करके कुछ पेज पर भेजने की इजाजत देता है यदि वे एक नई विंडो में लिंक खोलना चाहते हैं ।

क्या ऐसा करने के लिए कोई तरीका है? या क्या कोई मुझे सही दिशा में इंगित कर सकता है कि जेएसएफ लाइफसाइक्ल में मुझे एक चरण श्रोता का उपयोग करके ऐसा करने के लिए कूदना होगा?

उत्तर

2

सरलतम का विस्तार करना होगा और तदनुसार renderAsActive() विधि को ओवरराइड करना होगा। Mojarra खुला स्रोत है, बस विधि की प्रतिलिपि बनाएँ और उस रेखा को संपादित करें जहां यह writer.write("href", "#", "href") कहता है। अपनी अंतर्दृष्टि के अनुसार "#" स्ट्रिंग को बदलें।

public class MyCommandLinkRenderer extends CommandLinkRenderer { 

    @Override 
    protected void renderAsActive(FacesContext context, UIComponent command) throws IOException { 
     // ... 
    } 

} 

इसे चलाने के लिए प्राप्त करने के लिए, यह रजिस्टर faces-config.xml में इस प्रकार है:

<render-kit> 
    <renderer> 
     <component-family>javax.faces.Command</component-family> 
     <renderer-type>javax.faces.Link</renderer-type> 
     <renderer-class>com.example.MyCommandLinkRenderer</renderer-class> 
    </renderer> 
</render-kit> 

नोट Mojarra करने के लिए अपने रेंडरर इस तंग जोड़ों कि। जेएसएफ कार्यान्वयन स्वतंत्र होने के लिए, आपको मोजाररा विशिष्ट रेंडरर क्लास को विस्तारित करने के बजाय एक नया नया रेंडरर बनाना होगा।


ठोस समस्या से संबंधित नहीं, पढ़ने पर विचार When should I use h:outputLink instead of h:commandLink?

+0

आप BalusC धन्यवाद, विस्तार CommandLinkRenderer पूरी तरह से काम किया वांछित परिणाम प्राप्त करने। – bxr

+0

आपका स्वागत है। – BalusC

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