我有一个关于在JSF中输出对象列表作为逗号分隔列表的问题。
让我们说:
public class SomeObj {
private String name;
... constructors, getters and setters ...
}
和List< SomeObj>:
List<SomeObj> lst = new ArrayList<SomeObj>();
lst.add(new SomeObj("NameA"));
lst.add(new SomeObj("NameB"));
lst.add(new SomeObj("NameC"));
将其作为列表框输出我可以使用此代码:
<h:selectManyListbox id="id1"
value="#{listHolder.selectedList}">
<s:selectItems value="#{listHolder.lst}"
var="someObj"
label="#{someObj.name}"/>
<s:convertEntity />
</h:selectManyListbox>
但输出列表的最简单方法是什么,逗号分隔?像这样:
NameA, NameB, NameC
我应该使用JSTL&lt; c:forEach /&gt;或者可能是&lt; s:selectItems /&gt;标签也可以用?
答案 0 :(得分:24)
给定List<Person> persons
其中Person
具有name
属性
如果您已经使用EL 3.0的Java EE 7,那么请使用EL流API。
#{bean.persons.stream().map(p -> p.name).reduce((p1, p2) -> p1 += ', ' += p2).get()}
如果您还没有使用EL 3.0,但手头有JSF 2.x,那么请使用Facelets <ui:repeat>
。
<ui:repeat value="#{bean.persons}" var="person" varStatus="loop">
#{person.name}#{not loop.last ? ', ' : ''}
</ui:repeat>
或者,如果您仍然使用jurassic JSP,请使用JSTL <c:forEach>
。
<c:forEach items="#{bean.persons}" var="person" varStatus="loop">
${person.name}${not loop.last ? ', ' : ''}
</c:forEach>
答案 1 :(得分:7)
使用<ui:repeat>
(来自facelets)。它类似于c:forEach
或预先计算托管bean中逗号分隔的字符串,并通过getter获取它。
答案 2 :(得分:5)
如果您因使用JSF 1.2而无法使用varStatus
,则可以执行以下操作:
<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>
EL表达式周围没有空格是故意的,我们不希望在渲染的HTML中出现空格。