الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حقن managed bean في أخرى

بدأه Speed_Of_Light في 31 أكتوبر 2011 · 6 رد · 1,395 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

لدي مشروع تطبيق ويب أستخدم فيه JSF، فيه الصنفين الآتيين:

package session;

import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
...

@Named("user")
@SessionScoped
public class UserBean implements Serializable {
	// private fields
	...

    // Setters & getters
	...
}

package jsfc;

import javax.enterprise.context.SessionScoped;
import javax.inject.Inject;
import javax.inject.Named;
import session.UserBean;
...

@Named("transController")
@SessionScoped
public class TransController implements Serializable {

    @Inject private UserBean currentUser;
    ...

    public TransController() {
    }

    public String createFromUser() {
		// here's the problem: currentUser fields are nulled ...
        int id = currentUser.getId();
		// id == 0 !
		...
        return create();
    }    
	...
}

المشكلة أن خصائص الغرض currentUser فارغة (null أو 0 ...)

أي أن عملية حقن الـ UserBean فاشلة ...

أين الخطأ ؟ وما الحل ؟!

#2

السلام عليكم

من معلوماتي القليلة عن Dependency Injection انه يتم وضع القيم الافتراضية في ملف الـ Config كما في Spring او عند استخدام JSF مع Spring

هذا والله اعلم

#3

وعليكم السلام ورحمة الله وبركاته ,,

أخي الفاضل ..

ماهو كود اسناد القيمة

currentUser.setId;

ربما كانت المشكله في الاسناد وليس في الاستدعاء لانه من الطبيعي اذا كان الاسناد خاطئ النتيجه ستكون null

دمت في حفظ الله...

تم تعديل هذه المشاركة بواسطة JAVA FOR ALL في 5 نوفمبر 2011 في 22:31

سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولاحول ولا قوة إلا بالله

get-one-91.gif

الخبــــــرة هي مـــــــــــا تحصل عليه عندمــــا لا تحصل على ما تريده....

#4

@Ahmed Dalatony:

ليست المشكلة بالقيم الافتراضية، المشكلة أن الحقن يفشل حيث أنه ليس بإمكاني تغيير القيم.

@JAVA FOR ALL:

إنها مجرد setter method عادية:

    public void setId(int newValue) {
        id = newValue;
    }

ملاحظة: مازلت بحاجة لجواب حتى الآن والـ 40 نقطة محفوظة :)

#6

ربما انك نسيت أن تضع الكود التالي في faces-config.xml

<managed-bean>
  <managed-bean-name>transController</managed-bean-name>
  <managed-bean-class>TransController</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

<managed-bean>
  <managed-bean-name>user</managed-bean-name>
  <managed-bean-class>UserBean</managed-bean-class>
  <managed-bean-scope>request</managed-bean-scope>
</managed-bean>

أو ربما هذا يفيدك

http://www.codingtiger.com/questions/java/problem-injecting-Sessionscoped-bean-in-Managed-bean.html

دمت بحفظ الله ..

تم تعديل هذه المشاركة بواسطة JAVA FOR ALL في 16 نوفمبر 2011 في 15:59

سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولاحول ولا قوة إلا بالله

get-one-91.gif

الخبــــــرة هي مـــــــــــا تحصل عليه عندمــــا لا تحصل على ما تريده....

#7

اعتقد أن هذا مثال بسيط يحل مشكلتك .....

http://www.mkyong.com/jsf2/injecting-managed-beans-in-jsf-2-0/

دمت بحفظ الله

سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولاحول ولا قوة إلا بالله

get-one-91.gif

الخبــــــرة هي مـــــــــــا تحصل عليه عندمــــا لا تحصل على ما تريده....

مواضيع مشابهة