基于对象类型动态生成HTML

时间:2016-07-08 16:27:16

标签: jsf-2

我是JSF的新手,很抱歉,如果我的问题很简单。

我必须列出三种不同类型的项目:让我们说出具有不同元数据(属性)的书籍,软件和课程,并要求不同的视觉表现。

这些项中的每一项都是从一个抽象的Item类继承的,所以我有一个Items列表。

我想在Item类中声明一个抽象方法getHtml(),这样每个子类都可以实现它自己的"渲染器" 。然后在XHTML页面中,我将使用EL调用getHtml()方法。 问题是:这是正确的方法吗? 我看到一些缺点:

  1. 与视图混合的模型
  2. 通过Java代码生成的HTML(很难维护)。
  3. 任何建议都表示赞赏。

    我不知道这个综合报告是否足够清楚:如果需要澄清。

    提前致谢。

1 个答案:

答案 0 :(得分:0)

  1. 创建一个页面,用于在三者之间进行选择,例如,下拉列表。
  2. 对于视图,创建三个文件:book.xhtml,boftware.xhtml和courses.xhtml。
  3. 然后创建一个托管bean。

    @ManagedBean
    public class BkSoCoSelector {
    private String myChoice = null;
    //add setter and getter. 
    //add no-arg constructor. 
    }
    
  4. 在上面的类中创建一个方法来进行动态选择[参见示例]。注意:下面的选择基于上面的#1,下拉列表。

    public String pageSelector(){ //if null, return nothing. //if this.myChoice == book, return book; //no file extension needed. //do the same for the other files. }

  5. 在主页上,#1添加以下内容

    <h:commandButton value = "Submit" action = "#{bkSoCoSelector.pageSelector()}"/>

  6. 总结:

    • 为用户提供选择
    • 将所选值设置为实例变量。 //在幕后完成
    • 获取现在设置的实例变量。
    • 根据实例变量的值,选择要显示的页面。