Java 报表模板的动态选择解决方案

Java 报表模板的动态选择解决方案,java,jsf-2,Java,Jsf 2,我的要求是这样的, 当我选择一个像考试这样的模板时,将生成包含考试字段的考试页面(尊重POJO),当选择游戏页面时,将生成包含其字段的页面 我如何实现这种类型的需求。主要目标是,bean无需麻烦选择哪个模板。它是完全独立的。我不了解整个问题,但我会尽力帮助。 您可以为bean类使用模板方法设计模式,并且在JSF页面中,您可以调用抽象类方法。类似这样的内容: public abstract class AbstractBean { public void templateMethod()

我的要求是这样的,

当我选择一个像考试这样的模板时,将生成包含考试字段的考试页面(尊重POJO),当选择游戏页面时,将生成包含其字段的页面


我如何实现这种类型的需求。主要目标是,bean无需麻烦选择哪个模板。它是完全独立的。

我不了解整个问题,但我会尽力帮助。
您可以为bean类使用
模板方法
设计模式,并且在JSF页面中,您可以调用抽象类方法。类似这样的内容:

public abstract class AbstractBean {

    public void templateMethod(){
         //Same code for all children;
         foo();
         //Same code for all children;
    }

    protected abstract void foo();
}

public class Bean extends AbstractBean {

    protected void foo(){
        //Your specific code here;
    }
}
然后,在JSF页面中,您可以调用
{abstractBean.templateMethod()}
。但我不确定如何将子类注入
{abstractBean}
变量。

不过,有一个Facelet标记可以从另一方面帮助您:
ui:param
。看看这个:。与前面的代码无关,这是另一种解决方案。我自己已经用过了。您可以在模板页面(
ui:define
)中定义变量,在特定页面中,您只需使用
ui:param
为模板页面中定义的变量设置值。然后你调用
#{definedVariable.someMethod()}
我想这些是标记,我不确定。


希望我能提供帮助。

请指定您使用的模板类型以及您所说的bean类型?(ManagedBean/JavaBean/POJO)。@Guizzo:谢谢你的回复,我正在使用cdibean