Java 如何在SelectManyList框中将集合元素显示为项目?
我有一颗豆子:Java 如何在SelectManyList框中将集合元素显示为项目?,java,jsf,converter,Java,Jsf,Converter,我有一颗豆子: public ProjectServiceImpl { public List<Project> getAllProjects () { ... } } publicprojectserviceinmpl{ 公共列表getAllProjects(){…} } 我想将所有这些项目列为中的项目。当用户选择一个或多个项目并按下提交按钮时,所选项目应转换为项目 我对如何列出项目以及相应的转换器应该是什么样子有些困惑?要在中列出项目,需要使用并将值指向Sele
public ProjectServiceImpl {
public List<Project> getAllProjects () { ... }
}
publicprojectserviceinmpl{
公共列表getAllProjects(){…}
}
我想将所有这些项目列为
中的项目。当用户选择一个或多个项目并按下提交按钮时,所选项目应转换为项目
我对如何列出项目以及相应的转换器应该是什么样子有些困惑?要在
中列出项目,需要使用
并将值指向SelectItem
对象的列表
我通常的做法是循环浏览项目,并将每个项目转换为SelectItem
。同时,我还使用SelectItem
值作为键将项目存储在HashMap
中。然后,当需要获取项目对象列表时,可以循环选择的值并从地图中获取对象
如果不想创建哈希映射
,您可以将项目
在列表中的位置用作SelectItem
值,并以这种方式查找项目。您需要实现,以便所需的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());
}
然后需要实现HTTP请求参数(根据定义String
)可以转换回所需的Java对象(Project
)
最后,只需将此转换器与所讨论的对象类型相关联,当Project
出现在图片中时,JSF将负责转换,无需指定converterId
或f:converter
:
<converter>
<converter-for-class>com.example.Project</converter-for-class>
<converter-class>com.example.ProjectConverter</converter-class>
</converter>
com.example.Project
com.example.ProjectConverter
这样,您就可以创建SelectItem
,并将Project
作为值
你可以从这篇博客文章中获得一些背景信息和更多想法:他的问题更多的是如何使用非标准对象,如
Project
作为选择项,而不是如何创建选择项。我只是想给出一个替代方案。
<converter>
<converter-for-class>com.example.Project</converter-for-class>
<converter-class>com.example.ProjectConverter</converter-class>
</converter>