استرداد أسماء Javabean المرتبطة بـ JSP أو إنشاء متغير مع الاسم الديناميكي

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

سؤال

أنا usign جافابان في صفحة JSP. أود أن أعطيه اسمًا ديناميكيًا ، لأنه بناءً على قيمة المتغير (دعنا نسميها foo) ، أريد أن يكون لها محتويات مختلفة ، وأريد الاحتفاظ بكل هذه الإصدارات المختلفة في الذاكرة. أريد أن يكون للفاصوليا نطاق الجلسة ، لأن إعادة تقييم المحتويات باهظة الثمن.

في الوقت الحالي ، يكون للفاصول اسم ثابت ، وإذا قمت بإعادة تحميل الصفحة بقيمة مختلفة foo, محتويات الفول هي نفسها كما كان من قبل (jsp:usebean تبحث عن جافابان مع الاسم المحدد ، وإذا كان موجودًا ، فهو يستخدم القديم). أود أن أبقي كل من الإصدار القديم والجديد ، لذلك يجب أن يكون لديهم أسماء مختلفة.

ما أريد فعله هو:

<jsp:useBean id="stats<%=foo%>" class="foo.bar" scope="session">
</jsp:useBean>

مشكلتي هي أنه لا يمكنني الرجوع إلى Javabean في JSP Code ، لأنني لا أعرف اسمها. أي أفكار بشأن كيفية حل هذا؟

في جوهرها أريد أن أبني متغيرًا باسم ديناميكي ، استنادًا إلى vaslue لمتغير آخر.

بدلاً من ذلك ، أريد استرداد أسماء Javabeans المرتبطة بالصفحة الحالية ، حتى أحصل على إشارة إلى Javabean التي تم إنشاؤها للتو.

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

المحلول

أسهل طريقة لتنفيذ العرف Map الذي تخزنه في نطاق الجلسة. مع Map يمكنك استخدام تدوين الدعامة لإحالة المفتاح ديناميكيًا.

<jsp:useBean id="beanMap" class="com.example.BeanMap" scope="session" />
...
${beanMap[someDynamicKey].someProperty}

تحتاج فقط لتجاوز Map#get() طريقة للسماح لها بتثبيت الفول إذا كان غائبًا بدلاً من العودة null.

public class BeanMap extends HashMap<String, Bean> {
    @Override public Bean get(Object key) {
        Bean bean = super.get(key);
        if (bean == null) {
            bean = new Bean();
            super.put(String.valueOf(key), bean);
        }
        return bean;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top