在 JSF 2.0 中,您不需要这么长的值表达式来访问您的 cookie,有一个名为的隐式对象cookie
引用 cookie 映射,它相当于facesContext.externalContext.requestCookieMap
.
所以,下面的代码:
<h:outputText value="#{cookie['TESTCOOKIE'].value}" />
应输出与以下内容相同:
<h:outputText value="#{facesContext.externalContext.requestCookieMap['TESTCOOKIE'].value}" />
现在,如果你想遍历所有这些,我的建议是使用 backing bean:
@RequestScoped
@ManagedBean(name = "triky")
public class TrikyBean {
public List getCookies() {
FacesContext context = FacesContext.getCurrentInstance();
Map cookieMap = context.getExternalContext().getRequestCookieMap();
return new ArrayList(cookieMap.values());
}
}
然后像这样使用它
<ui:repeat value="#{triky.cookies}" var="ck">
#{ck.name}: #{ck.value}<br/>
</ui:repeat>
澄清:这是因为<ui:repeat />
标签只接受java.util.List
它的value
属性,否则它会创建自己的ListModel
,里面只有一个元素。values()
此外,a 中方法的默认实现给出的集合java.util.Map
不是 ajava.util.List
而是 a java.util.Set
,因此,<ui:repeat/>
标签使用该集合作为其自己的列表模型的唯一元素,并且在迭代该列表模型时,元素的数量只是其中一个实际上都不是饼干。