我今天刚才注意到会话地图包含的内容比我输入的要多.
Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
Iterator attributeNames = sessionMap.keySet().iterator();
while ( attributeNames.hasNext() ){
System.out.println(attributeNames.next().toString());
}
Run Code Online (Sandbox Code Playgroud)
我在会话中发现了两个未知对象: com.sun.faces.application.view.activeViewMaps和javax.faces.request.charset.在会话中找到这些对象是正常的吗?
我问这个是因为com.sun.faces.application.view.activeViewMaps在服务器重启时给了我序列化错误.看起来它试图序列化几乎所有东西.
注意:我知道我可以通过取消注释<Manager pathname="" />服务器context.xml文件来关闭序列化.我只是想知道com.sun.faces.application.view.activeViewMaps在会话中找到是否正常.
是的,在会话中找到两者是正常的:
com.sun.faces.application.view.activeViewMaps:
从JSF 2.2.0开始,com.sun.faces.application.view.ViewScopeContextManager处理CDI @ViewScopedbean,并将活动视图映射ACTIVE_VIEW_MAPS作为键存储在会话中(ACTIVE_VIEW_MAPS是一个值为的常量字段"com.sun.faces.application.view.activeViewMaps"),以便跟踪它们.
当会话被破坏时,它们也将被销毁,您可以sessionDestroyed(HttpSessionEvent hse)从grepcode.com查看源代码.
javax.faces.request.charset:
在JSF的文档,你可以关于方法发现public String calculateCharacterEncoding(FacesContext context)的ViewHandler,即:
返回要用于此请求的正确字符编码.
采用以下算法.
- 检查Content-Type请求标头.如果它有一个charset参数,请将其解压缩并将其作为编码返回.
- 如果未
charset找到参数,请通过调用ExternalContext.getSession(boolean)传递false作为参数来检查是否存在会话.如果该方法返回true,则通过调用获取会话Map,ExternalContext.getSessionMap()并在符号常量的值给出的键下查找值CHARACTER_ENCODING_KEY.如果存在,则返回值,转换为String.- 否则,返回null
虽然CHARACTER_ENCODING_KEY是一个恒定的领域:
密钥,在会话的属性集中,可以在其下存储和检索响应字符编码.
你可以从这里得到它的价值,即:"javax.faces.request.charset"
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |