In JSF what is the shortest way to output List<SomeObj> as comma separated list of "name" properties of SomeObj
I have a question about outputing a list of objects as a comma separated list in 开发者_Go百科JSF.
Let's say:
public class SomeObj {
private String name;
... constructors, getters and setters ...
}
and List<SomeObj>:
List<SomeObj> lst = new ArrayList<SomeObj>();
lst.add(new SomeObj("NameA"));
lst.add(new SomeObj("NameB"));
lst.add(new SomeObj("NameC"));
to output it as a listbox I can use this code:
<h:selectManyListbox id="id1"
value="#{listHolder.selectedList}">
<s:selectItems value="#{listHolder.lst}"
var="someObj"
label="#{someObj.name}"/>
<s:convertEntity />
</h:selectManyListbox>
But what is the easiest way to output the list as is, comma seperated ? Like this:
NameA, NameB, NameC
Should I use JSTL <c:forEach/> or may be the <s:selectItems/> tag can also be used ?
Given a List<Person> persons
where Person
has a name
property,
If you're already on Java EE 7 with EL 3.0, then use EL stream API.
#{bean.persons.stream().map(p -> p.name).reduce((p1, p2) -> p1 += ', ' += p2).get()}
If you're not on EL 3.0 yet, but have JSF 2.x at hands, then use Facelets
<ui:repeat>
.<ui:repeat value="#{bean.persons}" var="person" varStatus="loop"> #{person.name}#{not loop.last ? ', ' : ''} </ui:repeat>
Or if you're still on jurassic JSP, use JSTL
<c:forEach>
.<c:forEach items="#{bean.persons}" var="person" varStatus="loop"> ${person.name}${not loop.last ? ', ' : ''} </c:forEach>
See also:
- How iterate over List<T> and render each item in JSF Facelets
- JSTL in JSF2 Facelets... makes sense?
use <ui:repeat>
(from facelets). It's similar to c:forEach
Or pre-compute the comma-separated string in the managed bean, and obtain it via a getter.
If you can't use varStatus
because you're stuck with using JSF 1.2, you can do:
<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>
The absence of whitespace around the EL-expressions is deliberate, we don't want a space to appear there in the rendered HTML.
精彩评论