代码之家  ›  专栏  ›  技术社区  ›  Jared

JSF从子类中选择项

  •  2
  • Jared  · 技术社区  · 16 年前

    我正在尝试填充 <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 方法在 状态 一点都不上课。页面加载完成后,选择框为空,控制台没有 I was called! 从 getAll() 方法。

    我对JSF有点陌生,我尝试过尽我所能地去寻找最好的,但是我不确定在寻找这个的时候要用什么术语,因为从技术上讲,它不是一个“子类”,但这是我能想到的最好的名字,所以不用说,我没有从搜索中找到任何东西。

    附加信息

    如果它有帮助:

    • 我正在使用GlassFish作为我的应用服务器
    • 我的ORM使用Hibernate
    • 我使用的是JSF 2.0
    2 回复  |  直到 16 年前
        1
  •  2
  •   BalusC    16 年前

    #{citation.status} null

    h:selectOneMenu value 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());
        }
    
    }
    
        2
  •  0
  •   Thorbjørn Ravn Andersen    16 年前