الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Problem When Invoking View Row Client Class

Featured Replies

بتاريخ:

السلام عليكم
انا عندى 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





 

بتاريخ:

الامر لا يحتاج الى managed Bean اصلا ما دام ال attribute ده موجود فى الصفحه كل اللى عليك انك حتروح على البوتون اللى عاوز تعمله disable وفى ال property inspector تكتب كده مثلا

 #{bindings.Ename.inputValue eq 'القيمه اللى حتخلى البوتون ديسيبل} 



وطبعا حتعمل الpartial trigger للبوتون على ال ID الخاص بال component اللى حتحمل قيمه الاتريبيوت كالانبون تكست مثلا وتخلى الانبوت تكست ده ال autosubmit بتاعه ب true وخلاص :(

بتاريخ:

حلك صح بس بدل ما تستخدم فيو استخدم الايتراتور الي علي الصفحه مباشرة لانه هو الي شايل القيمه الحاليه للستاتس
وبعدين ما تعملش اوبجكت جديد من الفيو لو عاوز الفيو هاتها مباشرة من الابلكين موديل

بس الحل الاصح طبعا هو حل الزميلة هاله اسهل واسرع واحسن في التعديل

دايما استخدم الاكسبريشن والجروفي علي قد ما تقدر بدل الاكواد

بتاريخ:
  • كاتب الموضوع

شكرا جزيلا على الحل بس اا فى عندى مشكلة مش هتمكنى انى استخدم الحل دة و المفروض نى كنت اشرح لية انا اخترت الحل الصعب دة
فى سببين اساسيين
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
لانى بصراحة كسلت اكتب كل دة تانى معلش :(

تم تعديل بواسطة tarek_fathi

بتاريخ:

طب ما تشتغل ع الحل بتاعك عادي خلي مثلا ميثود تريترن بولين وخلي الديسابل عليها والميثود دي هات فيها الايتراتور او الفيو براحتك وهات الاتربيوت والقيمه الحاليه الي فيه وحسب القيمه ريترن ترو او فولس ده طبعا لو مره واحده يعني اول ما الصفحه تظهر

او حسب الفاز اي دي واشتغل عليها في البيفور فاز
تجيب الاتربيوت عادي وقيمته وتجيب الكمبوننت بالي دي بتاعه وتعمله ديسابل او اينابل عادي حسب شرطك وبعدها ما تنساش تعمل بارتيال تريجر عليه ععلشان يرفرش الكمبوننت ع الصفحه

بتاريخ:
  • كاتب الموضوع

طب ما تشتغل ع الحل بتاعك عادي خلي مثلا ميثود تريترن بولين وخلي الديسابل عليها والميثود دي هات فيها الايتراتور او الفيو براحتك وهات الاتربيوت والقيمه الحاليه الي فيه وحسب القيمه ريترن ترو او فولس ده طبعا لو مره واحده يعني اول ما الصفحه تظهر

او حسب الفاز اي دي واشتغل عليها في البيفور فاز
تجيب الاتربيوت عادي وقيمته وتجيب الكمبوننت بالي دي بتاعه وتعمله ديسابل او اينابل عادي حسب شرطك وبعدها ما تنساش تعمل بارتيال تريجر عليه ععلشان يرفرش الكمبوننت ع الصفحه

عندى سؤالين بالنسبة للحل بتاعك
الاول عاوز مثال اذاى اجيب Ittrator و اساتخدمة فى كود
و التانى اذاى اضيف PPR فى ال RunTime لل Button ?

شكرا جزيلا
بتاريخ:

الايتراتور

    
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);


بتاريخ:

مين قالك انى فى ال Template لا يوجد bindings ?

ثانيا: لا افضل فكرة كسر ال MVC بالطريقه دى

عموما ما دام سالت فى ال OTN فحيدولك حلول كتيره حتحل المشكله

بتاريخ:

الأخ طارق:
بداية فإن تفكيرك سليم بوضع الزر في تمبلت حتى لا تكرر الكود أكثر من مرة ولكن التنفيذ غير سليم لأنك لا تستطيع إنشاء object مباشرة من فيو موجود وبالتالي لا يصلح الكود الذي كتبته.
يوجد لديك حلان حتى تضع الكود في مكان واحد:
الحل الأول هو تخزين قيمة الـ status الحالي في الـ session ومن ثم يمكنك عمل الإكسبريشن عليه
الحل الثاني كما قال الأخ xizoaziz مع ضرورة عمل check على الـ null قبل استدعاء أي قيمة

إذا كنت تريد استخدام الـ phase listener ففي هذه الحالة يجب عليك ربط الزر من خلال binding حتى يمكنك التحكم في خصائصه من خلال كود موحد

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.