填充ListBox onLoad JSF

时间:2011-07-31 10:48:25

标签: java jsf constructor onload selectonemenu

我正在使用netbeans 6.9.1 Glassfish 3.我有一个JSF文件,上面有一个selectOneMenu列表框。此列表框将填充DB中的值。

现在,当我单击表单上的按钮时,值将添加到列表框中。我想要做的是,当页面自己加载时填充列表框。

知道我应该怎么做。我尝试将代码添加到Java构造函数中,因此它会调用它,但它不起作用。 (我得到一个警告,要求让课程最终 - 如果我这样做,我无法从我的JSF访问任何方法)

我收到的警告 - 构造函数中的可覆盖方法调用

代码太大我不能把它放在这里,我需要知道一个解决方案来克服这个

2 个答案:

答案 0 :(得分:1)

  

知道我应该怎么做。我尝试将代码添加到Java构造函数中,因此它会调用它,但它不起作用。 (我得到一个警告,要求让课程最终 - 如果我这样做,我无法从我的JSF访问任何方法)

     

我收到的警告 - 构造函数中的可覆盖方法调用

这只是一个Netbeans警告,而不是Java编译错误。你的代码应该编译并运行得很好。 Netbeans只是试图变得聪明并暗示潜在的设计问题。您的构造函数正在调用同一个类的抽象方法。这是不是真的取决于我们一无所知的设计残余,但你应该意识到它可能会导致代码中的错误和错误。对我来说,至少没有理由为什么要调用抽象方法来预填充下拉列表,所以可能这根本不相关。

忽略并运行它。或者重新考虑你的设计方法。

另见:

答案 1 :(得分:0)

  1. 创建一些ManagedBean类并为其提供SelectItem列表(使其成为属性)
  2. 从您的jsf(xhtml)页面
  3. 中引用此属性

    现在应该加载项目。

    @ManagedBean
    public class MyBean {
      private List<SelectItem> items; // populate from DB
      public List<SelectItem> getItems() { return items; }
      // no need to setter
    }
    
    <h:selectOneMenu value="#{myBean.whatever}">
        <f:selectITems value="#{myBean.items}" />
    </h:selectOneMenu>
    

    修改:关于填充值...

    通常你有数据库服务并将它实例化(或注入它)到bean和填充项目,如items = service.loadItems()

    也许您可能想要迭代它们,因为您需要使用String构造函数创建SelectItem值:)