Подтвердить что ты не робот

В JSF то, что является самым коротким способом вывода List <SomeObj> в виде разделенного запятыми списка свойств "name" SomeObj

У меня вопрос о выводе списка объектов в виде списка с запятыми в 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/ > тег также можно использовать?

4b9b3361

Ответ 1

используйте <ui:repeat> (из фишек). Он похож на c:forEach

Или предварительно вычислить строку, разделенную запятыми, в управляемом bean и получить ее через getter.

Ответ 2

Учитывая 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>
    

См. также:

Ответ 3

Если вы не можете использовать varStatus, потому что вы застряли в использовании JSF 1.2, вы можете сделать:

<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>

Отсутствие пробелов вокруг EL-выражений является преднамеренным, мы не хотим, чтобы там отображалось место в визуализированном HTML.