الانتقال إلى المحتوى
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.

مشكله فى P:selectonemenu فى ال Jsf

Featured Replies

بتاريخ:

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

انا عندى مشكله فى استخدام ال p:selectOneMenu

وهى ان ال value الموجوده فى ال selectOneMenu

لا تظهر فى ال inputtext موجود فى p:dialog

والذى يظهر عندما اضغط على p:commandputton

هذه هى ال managebean

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package beans;

import dao.AdminDAO;
import dao.UserRegister;
import java.util.ArrayList;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

/**
 *
 * @author shokry
 */
@ViewScoped
@ManagedBean()
public class FacultyMB {

    University university;
    Faculty faculty;
    public AdminDAO adminDAO;

    public University getUniversity() {
        if (university == null) {
            university = new University();
        }
        return university;
    }

    public void setUniversity(University university) {
        this.university = university;
    }

    public Faculty getFaculty() {
        if (faculty == null) {
            faculty = new Faculty();
        }
        return faculty;
    }

    public void setFaculty(Faculty faculty) {
        this.faculty = faculty;
    }

    public ArrayList<SelectItem> getUniversities() {
        ArrayList<University> lst = UserRegister.getUniversities();
        ArrayList<SelectItem> items = new ArrayList<SelectItem>();

        for (University t : lst) {
            items.add(new SelectItem(t.getUniversityId(), t.getName()));
        }

        return items;
    }

    public ArrayList<SelectItem> getUniFaculties() {
        ArrayList<Faculty> lst = UserRegister.getUniFaculties(university.getUniversityId());
        ArrayList<SelectItem> items = new ArrayList<SelectItem>();

        for (Faculty t : lst) {
            items.add(new SelectItem(t.getFacultyId(), t.getName()));
        }

        return items;
    }

    public void addUniversity() {
        adminDAO = new AdminDAO();
        adminDAO.addUniversity(university.getName());
    }

    public void editUniversity() {
        System.out.println("university is :  "
                + university.getName() + "");
        adminDAO = new AdminDAO();
        adminDAO.editUniversity(university.getUniversityId(), university.getName());
    }

    public void deleteUniversity() {
        adminDAO = new AdminDAO();
        adminDAO.deleteUniversity(university.getUniversityId());
    }

    public void addFaculty() {
        System.out.println("university is :  " + university.getUniversityId() + " universityid is : " + university.getUniversityId());
        adminDAO = new AdminDAO();
        adminDAO.addFaculty(faculty.getName(), 3);
    }

    public void deleteFaculty() {
        adminDAO = new AdminDAO();
        adminDAO.deleteFaculty(faculty.getFacultyId());
    }

    public void editFaculty() {
        adminDAO = new AdminDAO();
        adminDAO.editFaculty(faculty.getFacultyId(), faculty.getName());
    }

    public void getinfo() {
        System.out.println("university is :  " + university.getName() + " universityid is : " + university.getUniversityId());
    }

    public void universityChange(ValueChangeEvent e) {
        university = (University) e.getNewValue();
        FacesContext.getCurrentInstance().renderResponse();
    }
}

والكود الآتى هو مابه المشكله حيث ان

Faculty.university و Faculty.university.name و Faculty.university.universityId دائما ب null ولا استطيع ان استخمها او اراها داخل اى dialog

مع العلم ان   name,  universityId هى ال properties  للكلاس university

                    <h:form id="univerityForm">
                        <h:panelGrid columns="2" cellspacing="6" cellpadding="6">
                            <h:outputText value="Select University  " style="size: 3; font-weight: bold;"/>
                            <p:selectOneMenu id="university" value="#{facultyMB.university}">
                                <f:selectItems value="#{facultyMB.universities}"  var="university" itemLabel="#{facultyMB.university.name}" />
                                <f:ajax listener="#{facultyMB.universityChange}" execute="@form"/>
                            </p:selectOneMenu>
                        </h:panelGrid>

                    </h:form>

                    <h:panelGrid columns="2" cellspacing="6" cellpadding="6">
                        <p:commandButton value="add" icon="ui-icon-plus"
                                         onclick="uniCreateDialogWidget.show();"
                                         style="font-size: .6em; font-style: italic; width: 40px; hight: .3px">
                        </p:commandButton>
                        <p:commandButton value="edit" icon="ui-icon-plus"
                                         onclick="uniEditDialogWidget.show();"
                                         style="font-size: .6em; font-style: italic; width: 40px; hight: .3px">
                            <f:setPropertyActionListener target="#{facultyMB.university}" value="#{university}" />
                        </p:commandButton>
                    </h:panelGrid>


وهذا هو dialog page

وهنا ال vlaue

facultyMB.university.name

لا ترجع بشئ ودائما تاتى معى ب null

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <h:body>
        <p:dialog widgetVar="uniEditDialogWidget" id="uniEditDialogId"
                  height="150" width="500" modal="true" closable="true"
                  draggable="false" resizable="false">
            <h:form id="uniEditDialogForm" prependId="false">
                <h:panelGrid columns="2">
                    <h:outputText value="University Name" />
                    <h:inputText value="#{facultyMB.university.name}" required="true"
                                 label="University Name">
                        <f:validateLength minimum="4" />
                    </h:inputText>

                    <p:commandButton value="edit" icon="ui-icon-plus"
                                     action="#{facultyMB.editUniversity()}"
                                     
                                     oncomplete="closeDialogIfSucess(xhr, status, args, uniEditDialogWidget, 'uniEditDialogId')" />
                    <p:commandButton value="delete" 
                                     action="#{facultyMB.deleteUniversity()}"
                                     
                                     oncomplete="closeDialogIfSucess(xhr, status, args, uniEditDialogWidget, 'uniEditDialogId')" />
                    <p:commandButton value="cancel" icon="ui-icon-cancel"
                                     onclick="uniEditDialogWidget.hide();" type="button" />
                </h:panelGrid>
            </h:form>
        </p:dialog>
    </h:body>
</html>


ارجو المساعده

وشكرا للجروب الجميل

بتاريخ:

الاخ  /shokry3

 

الكود به العديد والعديد من الاخطاء

 

اولا: انت بتستخدم ال  primfaces  ومع ذلك فى ال  p:selectoneMenu استخدمت f:ajax وليس p:ajax

ثانيا: انت بتعمل set  للuniversity  بطرق كتيره اوى من غير اى داعى يعنى انت بتعملها set  عند الاختيار من ال select one menu وعن طريق ال set property listener  عند الضغط على  البوتون ومع ذلك ال University  بتبقى  فى الحالتين null  لان عندك اخطاء فى كل الطرق دى

ثالثا:  ازاى انت بتشاور على ال var  فى ال select Items بعد ما تقفلها وتقفل الselect one menu  هنا انت بتشير الى collection  غير موجود

رابعا: لازم حتحتاج converter  ما دام ال value  الخاصة بال select one menu  حاجة غير ال String  فأين هذا ال converter

خامسا: مفيش داعى لكل الطرق دى ببساطه شديده لو انت عاوز ما تختاره من ال select one menu  يظهر عندك فى ال dialog  عرف متغير فى ال  managed Bean وليكن

 

private university SelectedUniversity

// setter and getter 

وفى ال select one Menu  حتخلى القيمة بتاعتها هو المتغير ده زى ما انت عامل بدون ajax او property listener على البوتون وبالتالى اول ما يختار المستخدم اى قيمة حيحصلها set  فى ال bean  ولازم طبعا تعمل converter  عشان القيمة حتتاخد من السيليكت ك String  وال converter  حيحولها ل university

 

وللاختصار عملت لك مثال بسيط مبنى على POJO  فيه كلاس اسمه Student  فيه properties  ك (firstname و lastname وID وكده) وفى الصفحة فيها P:select one menu   اول ما تختار اسم اى طالب وتضغط على ال p:commandbutton حيظهر لك p:dilaog  فيه بيانات الطالب اللى اختارته

 

طبعا انا عامله فى المثال converter  عشان ياخد القيمة اللى طالعه string  ويحولها لكلاس Student

المثال معمول على Eclipse Juno  ومجرباه على Glassfish 3.1.2

 

ملحوظه

مينفعش تبقى عامل dialog   وتضعه فى صفحة تانية الا فى حالة عمل ui:include  لصفحة ال dialog  فى الصفحة الرئيسية بتاعتك

selectonemenu.rar

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

شكرا يابشمهندسه على المشاركه وعلى المجهود الجميل

انا لست مبتدئ فى ال J2EE حقيقة ولكن ليس لدى كثير من الخبرة

 

فانا عملت set لل university بكذا طر يقة لانى كنت بجرب ارجع ال value وكانت بردو بتجيلى ب null

كلامك مظبوط بالنسبة للأخطاء اللى عندى فشكرا على الملاحظة والرد السريع وانا ساقوم بتظبيط وتعديل الاخطاء عندى فى الكود

 

very thanks

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

شكرا كتير ...بس انا جربت ومشيت على نفس طريق المثال اللى فى المرفق بس بردو ال value بترجع ب null

 

>>> ده كود ال selectmenu فى ال jsf page

<h:form id="univerityForm">
                        <h:panelGrid columns="4" cellspacing="6" cellpadding="6">
                            <h:outputText value="Select University  " style="size: 3; font-weight: bold;"/>
                            <p:selectOneMenu value="#{facultyMB.university}"  effect="fade" converter="university">  
                                <f:selectItem itemLabel="Select One" itemValue="" />  
                                <f:selectItems value="#{facultyMB.universities}" var="university" itemLabel="#{university.name}" itemValue="#{university}"/>  
                            </p:selectOneMenu>

                            <p:commandButton value="add" icon="ui-icon-plus"
                                             onclick="uniCreateDialogWidget.show();"
                                             style="font-size: .6em; font-style: italic; width: 40px; hight: .3px">
                            </p:commandButton>
                            <p:commandButton value="edit" icon="ui-icon-plus"
                                             onclick="uniEditDialogWidget.show();"
                                             style="font-size: .6em; font-style: italic; width: 40px; hight: .3px">
                                <f:setPropertyActionListener target="#{facultyMB.university}" value="#{university}" />
                            </p:commandButton>

                            <p:dialog widgetVar="uniEditDialogWidget" id="uniEditDialogId"
                                      height="150" width="500" modal="true" closable="true"
                                      draggable="false" resizable="false">
                                <h:form id="uniEditDialogForm" prependId="false">
                                    <h:panelGrid columns="2">
                                        <h:outputText value="University Name" />
                                        <h:inputText value="#{facultyMB.university.name}" required="true"
                                                     label="University Name">
                                            <f:validateLength minimum="4" />
                                        </h:inputText>

                                        <p:commandButton value="edit" icon="ui-icon-plus"
                                                         action="#{facultyMB.editUniversity()}"

                                                         oncomplete="closeDialogIfSucess(xhr, status, args, uniEditDialogWidget, 'uniEditDialogId')" />
                                        <p:commandButton value="delete" 
                                                         action="#{facultyMB.deleteUniversity()}"

                                                         oncomplete="closeDialogIfSucess(xhr, status, args, uniEditDialogWidget, 'uniEditDialogId')" />
                                        <p:commandButton value="cancel" icon="ui-icon-cancel"
                                                         onclick="uniEditDialogWidget.hide();" type="button" />
                                    </h:panelGrid>
                                </h:form>
                            </p:dialog>

                        </h:panelGrid>

                    </h:form>

وده كود ال converter مع العلم ان ال values اللى فى selectmenu انا بجبها من ال database

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package converter;

/**
 *
 * @author shokry
 */
import beans.Faculty;
import beans.FacultyMB;
import beans.University;
import java.util.ArrayList;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

@FacesConverter(forClass = beans.University.class, value = "university")
public class UniConverter implements Converter {

    public static List<University> universities;

    static {
        FacultyMB facultyMB = new FacultyMB();
        universities = facultyMB.getAllUniversities();
    }

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {

        if (arg2.trim().equals("")) {
            return null;
        } else {
            try {
                int number = Integer.parseInt(arg2);

                for (University u : universities) {
                    if (u.getUniversityId() == number) {
                        return u;
                    }
                }

            } catch (NumberFormatException exception) {
                throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid player"));
            }
        }

        return null;


    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {

        if (arg2 == null || arg2.equals("")) {
            return "";
        } else {
            return String.valueOf(((University) arg2).getUniversityId());
        }

    }
}

بتاريخ:

اولا: لازم تعرف ان ال converter  مينفعش تبقى فيه غير اتنين method هم ( get as object and get as String)
                            

  انا مليت فيه الليست عشان مفيش داتابيز عندى اما انت فحط الاتنين ميثود بس والليست جيبه عادى من الداتابيز وكمان خطأ انك لو عاوز تستدعى ال managed bean  تاخد منها اوبجكت الmanaged bean  ليست كلاس عشان تستدعيها بالطريقة دى يوجد طرق معروفه لاستدعاء ال managed bean

 

عموما خلينا فى الصفحة انا شايفه ان الايرور اللى عندك كالاتى

 

أولا: مفيش اى داعى ل  setPropertyActionListener اللى على البوتون لان المتغير بيتعمل له  set  عند الاختيار من السيليكت علاوه انه مش شايف ال university var لانك بتشاور على ال var  بعد ما خرجت من السيليكت.

ثانيا: انت واضع form  جوه form  وده خطأ اقفل ال form  الاولى قبل ما تفتح ال p:dialog 

ثالثا: فين ال update Attribute  اللى مفروض تضعه على ال p:command button الخاص بال Edit  المفروض تقوله عند الضغط عليه اعمل update  لل form  اللى جوه ال dialog  واللى اسمها عندك uniEditDialogForm

 

عموما شوف اولا بالنسبة للصفحة الاولى اللى فيها ال select  حيبقى الكود بتاعك كالاتى بعد التصحيح

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<h:head>
</h:head>
<h:body>
<h:form id="univerityForm">
<h:panelGrid columns="4" cellspacing="6" cellpadding="6">
  <h:outputText value="Select University  " style="size: 3; font-weight: bold;"/>
 <p:selectOneMenu value="#{facultyMB.university}"  effect="fade" converter="university">  
      <f:selectItem itemLabel="Select One" itemValue="" />  
        <f:selectItems value="#{facultyMB.universities}" var="university" itemLabel="#{university.name}" itemValue="#{university}"/>  
         </p:selectOneMenu>
<p:commandButton value="edit" icon="ui-icon-plus"   onclick="uniEditDialogWidget.show();" update=":uniEditDialogForm">
   </p:commandButton>
   </h:panelGrid>
</h:form>
<ui:include  src="/dialogs/updateUniversity.xhtml" />
</h:body>
</html>

 

وحتعمل صفحة تانية اسمها هنا updateUniversity فى فولدر اسمه dialogs زى ما شاورنا عليها فى ال ui:include حيكون الكود كالاتى لل dilaog

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:body>
 <p:dialog widgetVar="uniEditDialogWidget" id="uniEditDialogId"  height="150" width="500" modal="true" closable="true"
       draggable="false" resizable="false">

 <h:form id="uniEditDialogForm" prependId="false">
 <h:panelGrid columns="2">
 
     <h:outputText value="University Name" />
      <h:inputText value="#{facultyMB.university.name}" required="true"    label="University Name">
            <f:validateLength minimum="4" />
              </h:inputText>
 <p:commandButton value="edit" icon="ui-icon-plus"    action="#{facultyMB.editUniversity()}" update=":univerityForm"  oncomplete="closeDialogIfSucess(xhr, status, args, uniEditDialogWidget, 'uniEditDialogId')" />
</h:panelGrid>
</h:form>
</p:dialog>
</h:body>
</html>

خللى بالك من update اللى ضفناها على ال command button فى كلا الصفحتين عشان تعمل تحديث للفورم حتى بعد التعديل

 

أما لو المشكلة استمرت وال input داخل ال dialog  لسه بييجى ب null فاعملى مثال بسيط بس كامل يعنى اعمل مثال على الuniversity فقط فيه سكريبت لجدول ال university وال Entity bean بتاعتها وال session bean اذا كنت بتستخدم EJB يعنى عاوزه مثال كامل وانا حشوف ازاى بتيجى ب Null ولو عملت المثال اعمله  على ال Eclipse

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

شكرا كتير

انا عملت مثال صغير باستخدام ال database والحمد لله اشتغلت

ولكن تقابلنى مشكله ..وهى انى اريد ان اضيف selectonemenu اخرى تحتوى على داتا ترتبط بال university عن طريق ال ID ولكنها لا تعمل كما فى المثال المرفق

ايضا اذا اردت ان اضيف datatable بحيث يعرض كل ال faculties المرتبطه بال selected university عن طريق ال universityID فالمفروض اعمل ايه بمثال صغير

 



 

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

بتاريخ:

في تقنية ADF نقوم بالتنفيذ عن طريق Cascading LOV

في تقنية JSF فنقوم بعمل كود يقوم بإرجاع القائمة المطلوبة بحيث يستقبل هذا الكود معامل Parameter يمثل الجامعة المطلوبة ثم نربط هذه القائمة بالكومبو الثاني

  • بعد 2 أسابيع...
بتاريخ:
  • كاتب الموضوع

الحمد لله

solved

ذى ما شرحت الاخت/ Hala Salem

 

وان شاء الله هرفع ال project اللى انا بعمله كله هنا

 

شكرا وربنا يوفقنا

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

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

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

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

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

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.