Ответ 1
используйте <ui:repeat>
(из фишек). Он похож на c:forEach
Или предварительно вычислить строку, разделенную запятыми, в управляемом bean и получить ее через getter.
У меня вопрос о выводе списка объектов в виде списка с запятыми в 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 < c: forEach/ > или может быть < s: selectItems/ > тег также можно использовать?
используйте <ui:repeat>
(из фишек). Он похож на c:forEach
Или предварительно вычислить строку, разделенную запятыми, в управляемом bean и получить ее через getter.
Учитывая List<Person> persons
, где Person
имеет свойство name
,
Если вы уже используете Java EE 7 с EL 3.0, используйте API потока EL.
#{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>
Или, если вы все еще находитесь на юрском JSP, используйте JSTL <c:forEach>
.
<c:forEach items="#{bean.persons}" var="person" varStatus="loop">
${person.name}${not loop.last ? ', ' : ''}
</c:forEach>
Если вы не можете использовать varStatus
, потому что вы застряли в использовании JSF 1.2, вы можете сделать:
<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>
Отсутствие пробелов вокруг EL-выражений является преднамеренным, мы не хотим, чтобы там отображалось место в визуализированном HTML.