我有一个关于在JSF中输出对象列表作为逗号分隔列表的问题.
让我们说:
public class SomeObj {
private String name;
... constructors, getters and setters ...
}
Run Code Online (Sandbox Code Playgroud)
和列表<SomeObj>:
List<SomeObj> lst = new ArrayList<SomeObj>();
lst.add(new SomeObj("NameA"));
lst.add(new SomeObj("NameB"));
lst.add(new SomeObj("NameC"));
Run Code Online (Sandbox Code Playgroud)
将其作为列表框输出我可以使用此代码:
<h:selectManyListbox id="id1"
value="#{listHolder.selectedList}">
<s:selectItems value="#{listHolder.lst}"
var="someObj"
label="#{someObj.name}"/>
<s:convertEntity />
</h:selectManyListbox>
Run Code Online (Sandbox Code Playgroud)
但输出列表的最简单方法是什么,逗号分隔?像这样:
NameA, NameB, NameC
Run Code Online (Sandbox Code Playgroud)
我应该使用JSTL <c:forEach />还是可以使用<s:selectItems />标签?
Bal*_*usC 25
给定一个List<Person> persons
地方Person
有一个name
特性,
如果您已经在使用EL 3.0的Java EE 7上,那么请使用EL流API.
#{bean.persons.stream().map(p -> p.name).reduce((p1, p2) -> p1 += ', ' += p2).get()}
Run Code Online (Sandbox Code Playgroud)如果您还没有使用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>
Run Code Online (Sandbox Code Playgroud)或者,如果您仍然使用jurassic JSP,请使用JSTL <c:forEach>
.
<c:forEach items="#{bean.persons}" var="person" varStatus="loop">
${person.name}${not loop.last ? ', ' : ''}
</c:forEach>
Run Code Online (Sandbox Code Playgroud)使用<ui:repeat>
(来自facelets).它类似于c:forEach
或者预先计算托管bean中逗号分隔的字符串,并通过getter获取它.
如果您varStatus
因使用JSF 1.2 而无法使用,则可以执行以下操作:
<ui:repeat value="#{listHolder.lst}" var="someObj">#{someObj != listHolder.lst[0] ? ',' : ''}
#{someObj.name}</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
EL表达式周围没有空格是有意的,我们不希望在渲染的HTML中出现空格.
归档时间: |
|
查看次数: |
6094 次 |
最近记录: |