java - JSF 从子类中选择项目

标签 java jsf jsf-2

我正在尝试填充 <h:selectOneMenu> 的列表.但是,我要检索的列表是另一个类的一部分,该类是基类中的一个变量。

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

我有一个 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<Status> getAll() {
        // goes to the database and gets a list of status objects
        System.out.println("I was called!");
    }

    // getters and setters
}

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

<h:selectOneMenu id="citation_status" value="#{citation.status}">
    <f:selectItems value="#{citation.status.all}" var="s"
            itemLabel="#{s.name}" itemValue="#{s.id}" />
</h:selectOneMenu>

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

我对 JSF 有点陌生,我已经尽力搜索了,但我不确定搜索时使用的术语,因为它在技术上不称为“子类”,但那是这是我能想到的最好的名字,不用说,我从搜索中一无所获。

附加信息

如果有帮助:

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

最佳答案

显然 #{citation.status} 返回了 null

也就是说,这是行不通的。 h:selectOneMenu 值 必须匹配与 f:selectItem itemValue 相同的类型,在本例中为 int。你会得到一个转换器异常。

如何最好地解决这个问题取决于问题中尚不清楚的功能需求。也许您需要 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());
    }

}

关于java - JSF 从子类中选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711572/

相关文章:

java - 使用 java 流和收集来获取泛型类型

java - Apache Http 客户端帮助 (POST)

Java - 区分ZIP文件和CSV文件

jsf - 通过查看参数功能可添加书签

css - 如何居中对齐 <p :notificationBar>

CSS 样式未应用于 JSF 页面

java - 对象输入流错误 : StreamCorruptedException

java - Primefaces 数据表过滤器

jquery-ui - 如何在 JSF 页面中包含外部 Javascript 文件

javascript - 使用 primefaces 访问 Jquery UI