سؤال

لدي exsisting Java/JSF موقع كل نص على الشاشة قادم من مكان الإقامة الملفات عن طريق <f:loadBundle basename="org.example.applicaltion" var="applicaltion" /> الذي يسحب النص من applicaltion.خصائص.

من أجل التشغيل شكلي فرعية من هذه أنا يريد أن سحب السلسلة من مكان آخر (CMS عبر خدمات الويب).تبحث في ResourceBundle الدرجة appares أن infrastructer عن شيء قريب من هذا مع وفد إلى الوالدين ResourceBundle.

أنا يريد somethis مثل هذا

public class Applicaltion extends ResourceBundle{
    @Override
protected Object handleGetObject(String key) {
    if(overridenKey(key)){
        return overridedValue(key);
    }
    return null; // ResourceBundle.getObject will delegate to parent 
             // if we return null
}
}

لقد حاولت هذه الأم باطل ، أفترض أن هذا هو أكثر تستخدم في حالة الافتراضي -> ar -> en_GB.

أنا أفكر في عدم جذابة جدا خيار لها خاصية الملف باسم مختلف عن العرف resourceBundle ثم تفويض من خلال كومة كاملة من ResourceBundle.getBundle(PROPERTY_FILE_NAME).getString(مفتاح) من داخل CustomResourceBundle.handleGetObject(مفتاح).

أي أفكار أفضل ؟

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

المحلول

وانتهى بي الأمر حل هذا عن طريق فحص إذا كان لدينا قيمة التجاوز، إذا نحن لم يعود ذلك، إلا أن يفوض إلى حزمة الموارد القياسية

public class UILabels extends ResourceBundle {


private ResourceBundle getFileResources(){
    return ResourceBundle.getBundle("com.example.web.UILabelsFile", this.getLocale());
}

public Enumeration<String> getKeys() {
    return getFileResources().getKeys();
}

protected Object handleGetObject(String key) {
    if(overrideValue(key)){
        return getOverridenValue(key);
    }
    return getFileResources().getObject(key);
}

}

لاحظ اختلاف طفيف في اسم الفئة هو UILabels وهو ما كل العملاء سيستخدم الملف هو UILabelsFile حتى محمل ResourceBundle لا يذهب العودية.

نصائح أخرى

يمكن أن تكتب مخصص PropertyResolver ، ومن ثم يجب أن تؤدي المنطق من حيث أن سحب العقار من القيم.

على سبيل المثال ، يمكنك تحديد الفول يسمى messageSource ويكون ذلك بتحميل التطبيق.خصائص بالإضافة إلى CMS الخاص بك أو خصائص كل ما لديك.

ثم كتابة مخصص PropertyResolver (هناك مثال عن كيفية القيام بذلك مع الربيع MessageSource هنا) وربطه في faces-config.xml استخدام شيء مثل هذا:

<application>  
<property-resolver>  
      com.package.MessageSourcePropertyResolver  
   </property-resolver>  
</application>   
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top