2012-03-25 16 views
8

के संदर्भ में इसका पता नहीं लगा सकता है। मैं f:ajax का उपयोग कर एक समग्र घटक ईवेंट से मूल घटक को अपडेट करने का प्रयास कर रहा हूं।जेएसएफ कंपोजिट घटक <f:ajax> में एक अज्ञात आईडी है - घटक

समग्र घटक यहाँ है:

<cc:interface> 
    <cc:attribute name="update" /> 
    <cc:attribute name="customid" required="true"/> 
    <cc:attribute name="val" required="true"/> 
    <cc:attribute name="selectedvalue" required="true"/> 
</cc:interface> 
<cc:implementation> 
    <h:panelGrid columns="2" style="font-size: 10px" > 
     <p:selectOneMenu id="#{cc.attrs.customid} value="#{cc.attrs.selectedvalue}"> 
      <f:selectItems value="#{cc.attrs.val}"/> 
      <f:ajax event="change" render="#{cc.attrs.update" /> 
     </p:selectOneMenu> 
     <p:commandButton type="button" icon="ui-icon-plus" onclick="dlg.show();" /> 
    </h:panelGrid> 
</cc:implementation> 

अब जब इस घटक का उपयोग इस प्रकार है:

<h:form> 
    <ez:combo customid="make" val="#{vehicleBean.makes}" selectedvalue="#vehicleBean.vehicle.make}" update="model" /> 
    <p:selectOneMenu id="model" value="#{vehicleBean.vehicle.model}"> 
     <f:selectItems value="#{vehicleBean.models}" /> 
    </p:selectOneMenu> 
</h:form> 

मैं निम्नलिखित त्रुटि मिलती है:

एक अज्ञात आईडी 'मॉडल' शामिल हैं - घटक के संदर्भ में इसे नहीं ढूंढ सकते

+0

गलत (गायब}) – lu4242

उत्तर

15

कंपोन के बाद से अद्यतन करने के लिए एनसी सीसी के बाहर है जिसे आपको इसे अलग तरीके से संबोधित करना है।

<h:form id="myform"> 

तो इस तरह से अपनी सीसी से लक्ष्य घटक को संबोधित:

render=":myform:model" 

सूचना अनुगामी बृहदान्त्र जो JSF दस्तावेज़ जड़ से विशेषता खोज करने देता है सबसे पहले अपने प्रपत्र एक आईडी दे।

+0

अभी भी खोजने में असमर्थ .. में एक अज्ञात आईडी है: myform: model ' –

+1

सही आईडी के लिए ब्राउज़र में जेनरेट किए गए एचटीएमएल स्रोत की जांच करें। हो सकता है कि आपके दस्तावेज़ पेड़ में एक और नामकरणकंटर है जिसे आपने अपने प्रश्न –

+0

में नहीं दिखाया धन्यवाद मैट यह काम करता है। –

4

मुझे थोड़ी देर पहले एक ही समस्या थी, केवल जानकारी के लिए, मैंने जेएसएफ मोजर कार्यान्वयन के स्रोतों की जांच की; वर्ग ajaxBehaviorRendered, जब एक च का सामना करना पड़ता: यहाँ यह कैसे काम करने लगता है है ajax तत्व प्रस्तुत करना, विश्लेषण की सामग्री प्रस्तुत करना इसकी विधि के माध्यम से विशेषता getResolvedId:


private static String getResolvedId(UIComponent component, String id) { 

     UIComponent resolvedComponent = component.findComponent(id); 
     if (resolvedComponent == null) { 
... 

बिंदु है विधि खोजकंपनी: घटक पेड़ में खोज के लिए इसे एक स्ट्रैट पॉइंट के रूप में आधार घटक आधार की आवश्यकता होती है। यदि पहचानकर्ता char ":" से शुरू होता है, तो घटक आधार व्यू रूट है।



    UIComponent base = this; 
    if (expr.charAt(0) == sepChar) { 
     // Absolute searches start at the root of the tree 
     while (base.getParent() != null) { 
      base = base.getParent(); 
     } 
     expr = expr.substring(1); 
    } 

वरना आधार घटक वर्तमान घटक के प्रकार NamingContainer के निकटतम माता पिता (जो है, अपने समग्र घटक है जहां आप अपने ajax घटक को परिभाषित कर रहे हैं) है।



    //Treat remainder of the expression as relative 
    else if (!(base instanceof NamingContainer)) { 
     // Relative expressions start at the closest NamingContainer or root 
     while (base.getParent() != null) { 
      if (base instanceof NamingContainer) { 
       break; 
      } 
      base = base.getParent(); 
     } 
    } 

फिर, दोनों ही मामलों में, यह इस शुरू से ही दिए गए पहचानकर्ता के साथ घटक खोज करने के लिए शुरू होता है।

यह व्यवहार जेएसएफ से निर्दिष्ट है।

आपके बिंदु से, यदि आपको समग्र के बाहर किसी घटक का संदर्भ देने की आवश्यकता है, तो आपको पूर्ण नाम परिभाषित करना होगा, 'cc.clientId' विशेषता के बाद उपसर्ग ':' का उपयोग करना होगा।

+0

बहुत अंतरंग बिंदु, धन्यवाद। बीटीडब्लू, हम सिर्फ रेंडर एट्रिब्यूट को 'क्लाइंट_आईडी' के रूप में क्यों नहीं दे सकते हैं, जो मूल रूप से आईडी बनाते हैं? –

+0

मैंने 2 साल से जेएसएफ के साथ काम नहीं किया है, मुझे आशा है कि मैं कुछ मूर्खतापूर्ण जवाब नहीं दूंगा। जो मुझे याद है (लेकिन मुझे वास्तव में यकीन नहीं है), जेएसएफ लाइफसाइक्ल, जब यह घटक पेड़ को संसाधित करता है और किसी प्रपत्र के अंदर एक घटक ढूंढता है, तो इस घटक के पहचानकर्ता को फॉर्म के पहचानकर्ता के साथ स्वचालित रूप से उपसर्ग करता है। इसलिए, यह ": client_id" को हल नहीं कर सकता क्योंकि यह वास्तविक पहचानकर्ता "form_id: client_id" है। लेकिन इसकी समीक्षा की जानी चाहिए क्योंकि पिछले 2 सालों में मैंने जेएसएफ पर ध्यान केंद्रित किया था। –

+0

तो, हाँ, घटकसेर्च arlgorithm एक घटक के लिए पूर्ण पथ की जरूरत है। क्या आप नहीं जानते कि यह मोजररा कार्यान्वयन के लिए एक विशिष्ट बात है या नहीं? –

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