jsf - 在JSF2.0中,如何在facelets中写出cookies?

标签 jsf cookies jsf-2 el

我知道如何从 facelets 中写出单个 cookies:

JSF:

<h:outputText value="#{facesContext.externalContext.requestCookieMap['TESTCOOKIE'].value}" />

输出:

MyCookieValue

我已经能够写出 map ,但输出的不是值而是对值的引用。

JSF:

<h:outputText value="#{facesContext.externalContext.requestCookieMap}" />

输出:

{DEFAULTUSERNAME=javax.servlet.http.Cookie@36a236a2, TESTCOOKIE=javax.servlet.http.Cookie@36b436b4, JSESSIONID=javax.servlet.http.Cookie@36d836d8}

最佳答案

在 JSF 2.0 中,您不需要这么长的值表达式来访问您的 cookie,有一个名为 cookie 的隐式对象它引用了 cookie 映射,它等同于 facesContext.externalContext.requestCookieMap .

所以,下面的代码:

<h:outputText value="#{cookie['TESTCOOKIE'].value}" />

应该输出相同的:

<h:outputText value="#{facesContext.externalContext.requestCookieMap['TESTCOOKIE'].value}" />

现在,如果您想遍历所有这些,我的建议是使用辅助 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() 的默认实现给出的集合java.util.Map 中的方法不是 java.util.List但是一个java.util.Set ,因此,<ui:repeat/>标签使用该集合作为它自己的列表模型的唯一元素,并且在遍历该列表模型时,元素的数量只有一个,实际上没有一个是 cookie。

关于jsf - 在JSF2.0中,如何在facelets中写出cookies?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11954869/

相关文章:

jsf - ui :fragment rendered attribute evaluated 是什么时候

php - 登录 cookie 不在页面刷新时保存

java - 从 Web 应用程序调用 Java native 接口(interface)

JSF 2.1 和 IE 条件注释

java - 如何使用 richfaces 对数据表进行排序

java - 无法访问 JSF Controller 中的某些(大写)字段?

ajax - JSF - 在 ajax 调用中传递参数 - 这段代码有什么问题?

php - php中setcookie和$_COOKIE的区别

node.js - Node - Express - session 不工作?

jsf-2 - 数据表更新后,Primefaces 数据表在过滤器字段中丢失文本