2012-11-10 27 views
5

मेरी समस्या यह है कि मैं अपने डेटाटेबल शो में एक कॉलम डिफ़ॉल्ट रूप से आउटपुटटेक्स्ट दिखाने की कोशिश कर रहा हूं, और कमांडबटन दबाए जाने पर इनपुटटेक्स्ट के साथ इसे प्रतिस्थापित करता हूं। समाधान नहीं मिला है। रास्ते से पहली पोस्ट।a4j: कमांड बटन पुनर्वितरण समृद्ध: डेटाटेबल

मैं एक a4j है: CommandButton है कि मैं अपने DataTable

<a4j:commandButton reRender="yieldTable" action="#{yieldSearch.activateVisible()}" 
id="modify" styleClass="editLargeIcon" value="Modify"> 
</a4j:commandButton> 

<rich:dataTable id="yieldTable" value="#{yieldSearch.yfitem.yielditem}" var="_yield"> 
<rich:column> 
<f:facet name="header">%-YLD</f:facet> 
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}"> 
</h:outputText> 
<h:inputText rendered="#{yieldSearch.visible}" /> 
</rich:column> 

के इस हिस्से rerender करने के लिए देख रहा हूँ और मैं इस विधि को सक्रिय करना चाहते हैं

@Name("yieldSearch") 
@Scope(ScopeType.CONVERSATION) 
public class YieldSearch implements Serializable{ 

private Boolean visible; 

public void activateVisible(){ 
    this.setVisible(true); 
    System.out.print(true); 
} 

    public void setVisible(Boolean visible) { 
    this.visible = visible; 
} 

public Boolean getVisible() { 
    return visible; 
} 

किसी भी मदद की (सिर्फ प्रासंगिक कोड से पता चलता) बहुत सराहना की।

उत्तर

5

आपको दोनों घटकों को <a4j:outputPanel id="myPanel" ajaxRendered="true"/> में लपेटने की आवश्यकता है। दोनों घटक पुन: प्रस्तुत करने में असफल होने का कारण यह है कि जिस घटक को आपने rendered="false" पर सेट किया है वह प्रारंभिक दृश्य प्रतिपादन पर ब्राउज़र पर नहीं भेजा जाएगा।

<a4j:outputPanel id="myPanel" ajaxRendered="true"> 
<h:outputText value="#{_yield.yfYield}" rendered="#{not yieldSearch.visible}"/> 
<h:inputText rendered="#{yieldSearch.visible}" /> 
</a4j:outputPanel> 

रास्ता ajax काम ताज़ा करता है जावास्क्रिप्ट का उपयोग कर नए मार्कअप के साथ अद्यतन करने के लिए डोम पेड़ में एक clientid पता लगाने के लिए कर रहा है, यानि कि घटक पहले से ही डोम वृक्ष में होना चाहिए। चूंकि आपने rendered="false" सेट किया है, इसलिए घटक डीओएम पेड़ में कभी शुरू नहीं हुआ था। तो AJAX अनुरोध पर, ब्राउज़र नहीं जानता कि आप किस बारे में बात कर रहे हैं क्योंकि यह क्लाइंट को अद्यतन करने के लिए नहीं मिल सकता है।

ajaxRendered="true" साथ outputPanel का उपयोग करना, तुम इतनी ajax ताज़ा एक पूरी, जो कुछ भी साथ आप इसे

+1

इस मामले में अंदर नेस्ट किया है के रूप में है कि घटक अपडेट करेगा, पूरे outputPanel नवीनीकृत कर रहे हैं, 'अमीर <: डेटाटेबल> 'UIContainer के रूप में कार्य करेगा, इसलिए डेटा तालिका को फिर से प्रस्तुत करने से' '/' 'दिखाएगा/छुपाएगा। ऐसा लगता है कि ओपी इस मामले के लिए वार्तालाप स्कोप्डे को संभाल नहीं सकता है। –