كيفية تعبئة الجانب الأيمن من richfaces وقائمة الاختيار?

StackOverflow https://stackoverflow.com/questions/839893

  •  22-07-2019
  •  | 
  •  

سؤال

أنا باستخدام Richfaces' وقائمة الاختيار وأريد أن تعيش على لوحة الجانب الأيمن مع قائمة SelectItems من النسخ الفول.

ملء الجانب الأيسر ليست مشكلة من النسخ الفول بيد أن الجانب الأيمن هو إشكالية.

هذا ما لدي حاليا

<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false">
    <f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>

تحرير:

لذلك يجب الأدوار 'a', 'b', 'c', و 'د'.

المستخدم لديه أدوار 'a' و 'd', حتى 'a' و 'd' ينبغي على لوحة الجانب الأيمن و 'ب' و 'ج' ينبغي على لوحة في الجانب الأيسر.

تحرير:

مزيد من التوضيح.

لدي ثلاث قوائم المستخدم.

  1. كل posible الأدوار (a thru d)
  2. جميع أدوار المستخدم هو جزء من (أ و د)
  3. جميع أدوار المستخدم ليس جزءا من (ب و ج)

جميع القوائم نوع البيانات ArrayList<SelectItem>.

أنا في حاجة إلى القدرة على التحرك الأدوار الفردية بين القائمة رقم 1 و قائمة رقم 2 ثم حفظ مجموعة جديدة من الأدوار.اعتقدت وقائمة الاختيار سيكون أفضل richfaces كائن للحصول على الوظيفة.

هل كانت مفيدة؟

المحلول

كنت أريد هذا الكود:

<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false" value="#{bean.chosenRoles}">
    <f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>

و في الفول تريد:

private String[] chosenRoles;

+ getter/setter 

Whenver كنت تريد أن تجعل الافتراضي الأدوار يمكنك فقط إضافة أدوار في chosenRoles مجموعة (على سبيل المثال في الفول منشئ).بهذه الطريقة chosenRoles دائما تحتوي على العناصر على الجانب الأيمن من قائمة الانتقاء ، في حين أن العناصر على الجانب الأيسر ليست في الصفيف.

ويساعد هذا الأمل!

نصائح أخرى

يبدو أنني وجدت الحل.

<rich:pickList value="#{aBean.rightSideValues}"> 
        <f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
  • "#{aBean.rightSideValues}" يجب أن يشير إلى القائمة أو مجموعة من الكائنات.مع هذه القيم الجانب الأيمن من اختيار القائمة سوف يتم ملؤها.

  • #{aBean.leftSideValues} يجب أن نشير إلى قائمة SelectItem الكائن.

إشعار واحد -- SelectItem كائن يجب أن يكون بناؤها مع الكائنات من "#{aBean.rightSideValues}".

على سبيل المثال.

class ABean{
   ...
   List<SomeObject> getRightSideValues(){
    ...
  }

   List<SelectItem> getLeftSideValues(){
      List<SomeObjects> someObjects = getAllAvailableObjects();
      List<SelectItem> sItems = new ArrayList<SelectItem>(); 
      for(SomeObject sObj : someObjects){
          SelectItem sItem = new SelectItem(sObj, sObj.toString());
          sItems.add(sItem);
      }
      return sItems;
}

لاحظ أن SelectItem يأخذ الحجة الأولى و هذه الحجة هو الإشارة إلى SomeObject.في الداخلية الغنية وجوه مقارنة الكائنات من "#{aBean.rightSideValues}" مع الكائنات من #{aBean.leftSideValues} مع مساعدة من طريقة

SomeObject.equals()

إذا كنت بحاجة إلى قيم أخرى من النص ، تحتاج إلى إجراء تحويل.

انظر http://programmingnutsandbolts.blogspot.com/2009/08/richfaces-picklist-converters.html

كما في RF 4.3.3 و ربما في وقت سابق أيضا ، تحتاج أيضا إلى تجاوز تجزئة طريقة النموذج الخاص بك فئة (الكيان فول).حيث تجاوز يساوي طريقة تحويل لا يكفي.التالية عملت بالنسبة لي PubThread الكيان الفول.

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (!(obj instanceof PubThread))
            return false;
        PubThread objectToCheck = (PubThread) obj;
        boolean isShallowCopy = (this.id.equals(objectToCheck.id));
        return isShallowCopy;
    }

    @Override
    public int hashCode() {
        return (this.id.hashCode());
    }

مجموعة قيمة من قائمة الانتقاء إلى صفيف من قيمة SelectItem.

مهما كنت تبدأ مع على الجانب الأيمن ثم في الأساس مجرد تكون القيمة الافتراضية من قائمة الانتقاء:

    <rich:pickList value="#{aBean.rightSideValues}"> 
        <f:selectItems value="#{aBean.leftSideValues}"/>
    </rich:pickList>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top