استرداد أسماء Javabean المرتبطة بـ JSP أو إنشاء متغير مع الاسم الديناميكي
-
26-09-2019 - |
سؤال
أنا 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;
}
}