在JSF中,输出列表的最短方法是什么<;SomeObj>;以逗号分隔的“列表”;名称“;SomeObj的性质

在JSF中,输出列表的最短方法是什么<;SomeObj>;以逗号分隔的“列表”;名称“;SomeObj的性质,jsf,facelets,Jsf,Facelets,我有一个关于在JSF中将对象列表输出为逗号分隔列表的问题 比如说: public class SomeObj { private String name; ... constructors, getters and setters ... } 并列出: 我应该使用JSTL还是也可以使用标记?使用(来自facelets)。它类似于c:forEach 或者预先计算托管bean中以逗号分隔的字符串,并通过getter获取该字符串。给定一个列表人员,其中人员具有名称属性 如果您已经在使用EL

我有一个关于在JSF中将对象列表输出为逗号分隔列表的问题

比如说:

public class SomeObj {
  private String name;
  ... constructors, getters and setters ...
}
并列出:

我应该使用JSTL还是也可以使用标记?

使用
(来自facelets)。它类似于
c:forEach

或者预先计算托管bean中以逗号分隔的字符串,并通过getter获取该字符串。

给定一个
列表人员
,其中
人员
具有
名称
属性

  • 如果您已经在使用EL3.0的JavaEE7上,那么使用EL流API

    #{bean.persons.stream().map(p -> p.name).reduce((p1, p2) -> p1 += ', ' += p2).get()}
    
  • 如果您还没有使用EL3.0,但是手头有JSF2.x,那么就使用Facelets

    
    #{person.name}{not loop.last?',':'}
    
  • 或者,如果您仍然使用jurassic JSP,请使用JSTL

    
    ${person.name}${not loop.last?',':''}
    
另见:

如果您因为使用JSF 1.2而无法使用
varStatus
,您可以:

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

EL表达式周围没有空格是故意的,我们不希望在呈现的HTML中出现空格。

我认为他没有使用Facelets,因为他显式地标记了JSP。有时,他们这样标记只是因为使用了
.JSP
扩展名(内部有Facelets):)@Vitaly Polonetsky use
ui:重复
并使用BalusC回答中的内部部分如果您使用的是
facelets
,则不要标记
jsp
。这是两种完全不同的视图技术,在JSF上下文中,Facelets或多或少是JSP的继承者。我已经相应地重新标记了。这需要JSF 2.0,也就是说,带facelets的JSF 1.2不支持varStatus,对吗?@meriton:是的,你说得对。然而,
c:forEach
应该通过
xmlns:c=”工作http://java.sun.com/jsp/jstl/core“
。谢谢您的确认。作为一个标记处理程序,c:forEach对我来说不起作用,因为在构建视图之后重复的次数会发生变化。但我找到了另一种方法(我把它作为答案加上去)。@梅里顿:不错!是的,我应该补充一点,JSTL只在视图构建时运行。JSF EL的一行中的lambda字符串连接器。。。像往常一样,来自巴卢斯克的疯狂的东西是相当罕见的。我认为应该是:
{someObj!=listHolder.lst[listHolder.lst.size()-1],“:”}{someObj.name}
NameA, NameB, NameC
#{bean.persons.stream().map(p -> p.name).reduce((p1, p2) -> p1 += ', ' += p2).get()}
<ui:repeat value="#{bean.persons}" var="person" varStatus="loop">
    #{person.name}#{not loop.last ? ', ' : ''}
</ui:repeat>
<c:forEach items="#{bean.persons}" var="person" varStatus="loop">
    ${person.name}${not loop.last ? ', ' : ''}
</c:forEach>
<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>