بتاريخ: 11 مايو 201114 سنة comment_211828 السلام عليكمانا عندى view object اسمها AdmMissionReqHdrVOوفيها attribute اسمة StatusValueو ليها "view row client class" و طبعا فيها ميود getStatusValue() و اسم الكلاس AdmMissionReqHdrVORowClient و عندى managed bean اسمها AdmWorkFlow و فيها attribute اسمه disableSubmitButton و نوعه booleanالمطلوب انى اغير قيمة disableSubmitButton ل false فى حاله لو ال Status =E or R or nullالحل اللى عملته هو انى ضيفت PhaseListener و فى الميثود afterPhase كتبت التالى public void afterPhase(PhaseEvent phaseEvent) { if(phaseEvent.getPhaseId()==PhaseId.RESTORE_VIEW){System.out.println("restore View "+ currentWorkFlow.getStatusValue()); } else if(phaseEvent.getPhaseId()==PhaseId.APPLY_REQUEST_VALUES){System.out.println("apply request values "+ currentWorkFlow.getStatusValue()); }else if(phaseEvent.getPhaseId()==PhaseId.PROCESS_VALIDATIONS){System.out.println("process validations "+ currentWorkFlow.getStatusValue()); }else if(phaseEvent.getPhaseId()==PhaseId.INVOKE_APPLICATION){System.out.println("invoke application "+ currentWorkFlow.getStatusValue()); currentRecordStatus = currentWorkFlow.getStatusValue(); System.out.println("status is :"+currentRecordStatus); if (currentRecordStatus == null) { setDisableSubmitButton(false); } else if (currentRecordStatus.equals("E") || currentRecordStatus.equals("R")) { //setItemDisabled(true); setDisableSubmitButton(false); } else { setDisableSubmitButton(true); } }else if(phaseEvent.getPhaseId()==PhaseId.UPDATE_MODEL_VALUES){System.out.println("update model values "+ currentWorkFlow.getStatusValue()); }else if(phaseEvent.getPhaseId()==PhaseId.RENDER_RESPONSE){ System.out.println("render response "+ currentWorkFlow.getStatusValue()); } } و طبعا قبل الميثود دى عرفت object من النوع AdmMissionReqHdrVORowClient private AdmMissionReqHdrVORowClient currentWorkFlow; و فى ال constructor currentWorkFlow = new AdmMissionReqHdrVORowClient (); لما بعمل debug بيظهر لى الخطا دةjava.lang.NullPointerException و كانه معملش object من AdmMissionReqHdrVORowClient يا ريت لو فى اى مساعدة تحل الخطا دة او لو فى حل تانى يحققلى الهدف اللى انا عاوزة و هو انى اغير قيمة attribute فى ال bean معتمد على قيمة attribute فى ال viewObject تقديم بلاغ
بتاريخ: 11 مايو 201114 سنة comment_211849 الامر لا يحتاج الى managed Bean اصلا ما دام ال attribute ده موجود فى الصفحه كل اللى عليك انك حتروح على البوتون اللى عاوز تعمله disable وفى ال property inspector تكتب كده مثلا #{bindings.Ename.inputValue eq 'القيمه اللى حتخلى البوتون ديسيبل} وطبعا حتعمل الpartial trigger للبوتون على ال ID الخاص بال component اللى حتحمل قيمه الاتريبيوت كالانبون تكست مثلا وتخلى الانبوت تكست ده ال autosubmit بتاعه ب true وخلاص تقديم بلاغ
بتاريخ: 11 مايو 201114 سنة comment_211850 حلك صح بس بدل ما تستخدم فيو استخدم الايتراتور الي علي الصفحه مباشرة لانه هو الي شايل القيمه الحاليه للستاتس وبعدين ما تعملش اوبجكت جديد من الفيو لو عاوز الفيو هاتها مباشرة من الابلكين موديلبس الحل الاصح طبعا هو حل الزميلة هاله اسهل واسرع واحسن في التعديلدايما استخدم الاكسبريشن والجروفي علي قد ما تقدر بدل الاكواد تقديم بلاغ
بتاريخ: 11 مايو 201114 سنة كاتب الموضوع comment_211853 شكرا جزيلا على الحل بس اا فى عندى مشكلة مش هتمكنى انى استخدم الحل دة و المفروض نى كنت اشرح لية انا اخترت الحل الصعب دةفى سببين اساسيين 1- ان فى عندى اكتر من 20 page fragment و مش عاوز انى اعمل كدة فى كل صفحة2- ال button اللى اسمة submitRecord موجود اصلا على page template و بالتالى مش هينفع اخلى ال disable property ل #{bindings.Ename.inputValue eq 'القيمه اللى حتخلى البوتون ديسيبل} لان مفيش فى التمبلت bindins لو عندك نفس المشكلة دى هتفكرو ازاى فى حلهاانا مش عاوز فى كل صفحة اعد اضيف Button و غير ال disable property to be EL مش كسل منى و الله لا بس علشان ممكن ال workflow او ال condition يتغير فلو اتغير هلف على الدنيا كلها اغير فيها لكن فى فى كلاس بتعالج الموضوع دة هغير فى الكلاس دى بسالرابط دة فى الحل اللى انا فكرت فية OTNلانى بصراحة كسلت اكتب كل دة تانى معلش تم تعديل 11 مايو 201114 سنة بواسطة tarek_fathi تقديم بلاغ
بتاريخ: 11 مايو 201114 سنة comment_211854 طب ما تشتغل ع الحل بتاعك عادي خلي مثلا ميثود تريترن بولين وخلي الديسابل عليها والميثود دي هات فيها الايتراتور او الفيو براحتك وهات الاتربيوت والقيمه الحاليه الي فيه وحسب القيمه ريترن ترو او فولس ده طبعا لو مره واحده يعني اول ما الصفحه تظهر او حسب الفاز اي دي واشتغل عليها في البيفور فاز تجيب الاتربيوت عادي وقيمته وتجيب الكمبوننت بالي دي بتاعه وتعمله ديسابل او اينابل عادي حسب شرطك وبعدها ما تنساش تعمل بارتيال تريجر عليه ععلشان يرفرش الكمبوننت ع الصفحه تقديم بلاغ
بتاريخ: 11 مايو 201114 سنة كاتب الموضوع comment_211855 طب ما تشتغل ع الحل بتاعك عادي خلي مثلا ميثود تريترن بولين وخلي الديسابل عليها والميثود دي هات فيها الايتراتور او الفيو براحتك وهات الاتربيوت والقيمه الحاليه الي فيه وحسب القيمه ريترن ترو او فولس ده طبعا لو مره واحده يعني اول ما الصفحه تظهر او حسب الفاز اي دي واشتغل عليها في البيفور فاز تجيب الاتربيوت عادي وقيمته وتجيب الكمبوننت بالي دي بتاعه وتعمله ديسابل او اينابل عادي حسب شرطك وبعدها ما تنساش تعمل بارتيال تريجر عليه ععلشان يرفرش الكمبوننت ع الصفحه عندى سؤالين بالنسبة للحل بتاعكالاول عاوز مثال اذاى اجيب Ittrator و اساتخدمة فى كودو التانى اذاى اضيف PPR فى ال RunTime لل Button ?شكرا جزيلا تقديم بلاغ
بتاريخ: 12 مايو 201114 سنة comment_211859 الايتراتور DCBindingContainer dcBindings = (DCBindingContainer)BindingContext.getCurrent().getCurrentBindingsEntry(); DCIteratorBinding iterBind= (DCIteratorBinding)dcBindings.get(pIteratorName); String attribute = (String)iterBind.getCurrentRow().getAttribute(pFiledName); بارتيال تريجر في الرن تايم FacesContext fctx=FacesContext.getCurrentInstance(); UIViewRoot root=fctx.getViewRoot(); RichImage bt=(RichImage)root.findComponent(pImageinPage); AdfFacesContext.getCurrentInstance().addPartialTarget(bt); تقديم بلاغ
بتاريخ: 12 مايو 201114 سنة comment_211861 مين قالك انى فى ال Template لا يوجد bindings ?ثانيا: لا افضل فكرة كسر ال MVC بالطريقه دى عموما ما دام سالت فى ال OTN فحيدولك حلول كتيره حتحل المشكله تقديم بلاغ
بتاريخ: 12 مايو 201114 سنة comment_211879 الأخ طارق:بداية فإن تفكيرك سليم بوضع الزر في تمبلت حتى لا تكرر الكود أكثر من مرة ولكن التنفيذ غير سليم لأنك لا تستطيع إنشاء object مباشرة من فيو موجود وبالتالي لا يصلح الكود الذي كتبته.يوجد لديك حلان حتى تضع الكود في مكان واحد:الحل الأول هو تخزين قيمة الـ status الحالي في الـ session ومن ثم يمكنك عمل الإكسبريشن عليهالحل الثاني كما قال الأخ xizoaziz مع ضرورة عمل check على الـ null قبل استدعاء أي قيمةإذا كنت تريد استخدام الـ phase listener ففي هذه الحالة يجب عليك ربط الزر من خلال binding حتى يمكنك التحكم في خصائصه من خلال كود موحد تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.