在JSF中,输出列表的最短方法是什么<;SomeObj>;以逗号分隔的“列表”;名称“;SomeObj的性质
我有一个关于在JSF中将对象列表输出为逗号分隔列表的问题 比如说:在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
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?',':''}
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 useui:重复
并使用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>