【问题标题】:How to show collection elements as items in selectManyListbox?如何将集合元素显示为 selectManyListbox 中的项目?
【发布时间】:2010-01-11 18:04:25
【问题描述】:

我有一颗豆子:

public ProjectServiceImpl {    
   public List<Project> getAllProjects () { ... }
}

我想将所有这些项目列为&lt;h:selectManyListbox&gt; 中的项目。当用户选择一个或多个项目并按下提交按钮时,应将所选项目转换为项目。

我对如何列出项目以及对应的转换器应该是什么样子感到有些困惑?

【问题讨论】:

    标签: java jsf converter


    【解决方案1】:

    您需要实现Converter#getAsString(),以便所需的Java 对象以唯一 字符串表示形式表示,该字符串表示可用作HTTP 请求参数。在这里使用数据库技术 ID(主键)非常很有用。

    public String getAsString(FacesContext context, UIComponent component, Object value) {
        // Convert the Project object to its unique String representation.
        return String.valueOf(((Project) value).getId());
    }
    

    然后您需要实现Converter#getAsObject(),以便可以将HTTP 请求参数(根据定义String)转换回所需的Java 对象(在您的情况下为Project)`。

    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        // Convert the unique String representation of Project to the actual Project object.
        return projectDAO.find(Long.valueOf(value));
    }
    

    最后只要把这个转换器与有问题的对象类型关联起来,JSF 就会在Project 出现时处理转换,无需指定converterIdf:converter

    <converter>
        <converter-for-class>com.example.Project</converter-for-class>
        <converter-class>com.example.ProjectConverter</converter-class>
    </converter>
    

    这样你就可以用Project作为值创建SelectItem

    您可以从这篇博客文章中获得一些背景信息和更多想法:http://balusc.blogspot.com/2007/09/objects-in-hselectonemenu.html

    【讨论】:

      【解决方案2】:

      要列出&lt;h:selectManyListbox&gt; 中的项目,您需要使用&lt;f:selectItems&gt; 并将值指向SelectItem 对象列表。

      我通常采用的方法是遍历项目并将每个项目转换为SelectItem。同时,我还将项目存储在HashMap 中,使用SelectItem 值作为键。然后当你需要获取项目对象的列表时,你可以循环选择值并从地图中抓取对象。

      如果您不想创建HashMap,您可以使用Project 在列表中的位置作为SelectItem 的值并以此方式查找项目。

      【讨论】:

      • 他的问题更多的是如何使用像Project这样的非标准对象作为选择项,而不是如何创建选择项。
      • 我只是想我会提供一个替代方案。
      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多