JSF从子类中选择项目

我正在尝试填充 。 但是,我尝试检索的列表是另一个类的一部分,该类是基类中的变量。

这是我所拥有的,我不确定这是否可能或如何做到这一点。

我有一个Citation类,其中包含以下内容:

 public class Citation { private int id; private String title; private Status status; // getters and setters } 

然后我有一个Status类,其中包含以下内容:

 public class Status { private int id; private String name; public List getAll() { // goes to the database and gets a list of status objects System.out.println("I was called!"); } // getters and setters } 

然后在我的xhtml页面上,我有以下内容:

    

但是,这似乎根本不是在Status类中调用getAll方法。 当页面完成加载时,选择框为空,控制台没有输出I was called! 来自getAll()方法。

我对JSF有点新意,我尝试过尽力搜索,但我不确定在搜索时使用的术语,因为它在技术上并不称为“子类”,但这是最好的名字我可以想出来,所以不用说,我从搜索中得不到任何东西。

附加信息

如果它有帮助:

  • 我正在使用Glassfish作为我的应用程序服务器
  • 我正在使用Hibernate作为我的ORM
  • 我正在使用JSF 2.0

显然#{citation.status}返回null

也就是说,这不会起作用。 h:selectOneMenu value必须与f:selectItem itemValue匹配,在这种情况下为int 。 你会得到转换器exception。

如何最好地解决这个问题取决于在问题中尚不清楚的function要求。 也许你需要f:selectItem itemValue="#{s}" ,或者你需要h:selectOneMenu value="#{citation.id}"


更新 :关于转换器,这是一个启动示例:

 @FacesConverter(forClass=Status.class) public class URLConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { try { return someStatusDAO.findById(Long.valueOf(value)); } catch (SomeException e) { throw new ConverterException(new FacesMessage(String.format("Cannot convert %s to Status", value)), e); } } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { return String.valueOf(((Status) value).getId()); } } 

在Citation中你需要一个公共getter来获取状态。