Ada*_*dam 12 jsf facelets map jsf-2 uirepeat
我在SO上讨论了一些其他的例子,讨论了一些奇怪的解决方法,但似乎都没有用,并且它们都是在JSF 2之前的版本中解决的.因此,它可以简单地输出映射的键吗?我试过ui:repeat和c:forEach就像下面没有运气一样:
<c:forEach items="${myBean.myMap.keySet}" var="var">
<h:outputText value="#{var}"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
Bal*_*usC 17
从您的代码:
<c:forEach items="${myBean.myMap.keySet}" var="var">
Run Code Online (Sandbox Code Playgroud)
这不会起作用.这需要一个接口getKeySet()上的Map方法,但没有.
如果您的环境支持EL 2.2(Servlet 3.0容器,如Tomcat 7,Glassfish 3等),那么您应该直接调用该keySet()方法,而不是将其作为属性调用:
<c:forEach items="#{myBean.myMap.keySet()}" var="key">
<h:outputText value="#{key}"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
或者如果你的环境还不支持EL 2.2,那么你应该直接遍历地图本身,这会在每次迭代时给出一个Map.Entry实例,而这个实例又有一个getKey()方法,所以这也应该这样做:
<c:forEach items="#{myBean.myMap}" var="entry">
<h:outputText value="#{entry.key}"/>
</c:forEach>
Run Code Online (Sandbox Code Playgroud)
以上都不适用,<ui:repeat>因为它不支持Map也不支持Set.它List仅支持和数组.之间的差<c:forEach>和<ui:repeat>是通过所述的方式<c:forEach>产生期间视图编译时间多个JSF的组分,<ui:repeat>产生该视图中产生其输出HTML多次渲染时间单个JSF组件.
Ada*_*dam 10
事实证明输出映射键的正确语法是:
<ui:repeat value="#{myBean.myMap().keySet().toArray()}" var="var">
<h:outputText value="#{var}"/><br/>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8765 次 |
| 最近记录: |