【发布时间】:2015-04-22 01:41:21
【问题描述】:
我有一个非常不同但需要成为一个列表的一部分的对象列表。例如页面上的小部件列表(天气、时钟、facebook..)。它需要在一个列表中,因为该列表需要按 10 块为一组进行排序、随机化和分页。
我当前解决方案的高级视图如下所示:
一个抽象基类:
abstract class MyBaseClass
{
Object getMe()
{
return this;
}
}
一个公共父类
public class Common extends MyBaseClass
{
public String commonMethod()
{
return "somestring";
}
}
其他类
public class A extends Common
{
public String method_1_ForA();
public String method_2_ForA();
}
public class B extends Common
{
public String method_1_ForB();
public String method_2_ForB();
}
它的实现如下所示:
public class MyQuickTest
{
public void test()
{
List<A> listA = new ArrayList<>();
List<B> listB = new ArrayList<>();
List<Common> listCommon = new ArrayList<>();
listCommon.addAll(listA);
listCommon.addAll(listB);
foreach(Common common:listCommon)
{
common.getMe(); //will return an object of type A or B
}
}
}
为了显示上面的内容,我必须使用自定义标签库返回上面的列表,并遍历我的 jsp 中的对象列表。然后对于每个对象,我必须检查类型,然后调用适当的 jsp/.tag 来呈现项目。
我的问题是:
- 有没有比从基类返回“对象”更好的方法来支持这一点?
- 如何避免在我的 JSP 中编写 if's?有没有一种方法可以完全根据类型加载标签? - 谷歌告诉我没有......或者如果不是按类型加载,是否还有其他技术、方法或设计模式可以提供更优雅的解决方案?
即
当前解决方案:
/// loop
<c:if test="${type==A}"> call render A JSP </c:if>
<c:if test="${type==B}"> call render B JSP </c:if>
// end loop
有希望的解决方案:
//loop
<dispatcher type="${type}"/> //load the appropriate render tag for the object
//end loop
任何帮助或建议将不胜感激。
【问题讨论】:
标签: java jsp arraylist collections jsp-tags