In JSF what is the shortest way to output List<SomeObj> as comma separated list of “name” properties of SomeObj

旧时模样 提交于 2019-11-29 09:18:48

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.

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:

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.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!