- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的目标是使 session 大小尽可能小。 (为什么?.. 这是另一个话题)。我拥有的是在 faces-config.xml 中声明的相位监听器
<lifecycle>
<phase-listener>mypackage.listener.PhaseListener</phase-listener>
</lifecycle>
我想在一些内存缓存中保存所有其他 View ,除了最后一个(最多两个)。获取 session 映射:
Map<String, Object> sessionMap = event.getFacesContext().getExternalContext().getSessionMap();
在 beforePhase(PhaseEvent event) 方法中,我可以访问所有 View 。所以在这里我可以将所有 View 保存到内存缓存并从 session 中删除它们。问题是在 jsf 中,这些仍然加载在浏览器中的 View 在哪里被请求,以便我可以在需要时重新填充这个 View 。有可能吗?谢谢。
最佳答案
要解决您问题的核心,请实现 ViewHandler
,您可以在其中控制 RESTORE_VIEW
和 RENDER_RESPONSE
阶段/过程。您将在 RENDER_RESPONSE
期间保存 View ,并在 RESTORE_VIEW
阶段有选择地恢复 View 。您的 View 处理程序可能类似于以下内容
public class CustomViewHandlerImpl extends ViewHandlerWrapper{
@Inject ViewStore viewStore; //hypothetical storage for the views. Could be anything, like a ConcurrentHashMap
ViewHandler wrapped;
public CustomViewHandlerImpl(ViewHandler toWrap){
this.wrapped = toWrap;
}
public UIViewRoot restoreView(FacesContext context, String viewId) throws IOException{
//this assumes you've previously saved the view, using the viewId
UIViewRoot theView = viewStore.get(viewId);
if(theView == null){
theView = getWrapped().restoreView(context, viewId);
}
return theView;
}
public void renderView(FacesContext context, UIViewRoot viewToRender) throws IOException, FacesException{
viewStore.put(viewToRender.getId(),viewToRender);
getWrapped().renderView(context, viewToRender);
}
}
只需插入您的自定义 View 处理程序,使用
<view-handler>com.you.customs.CustomViewHandlerImpl</view-handler>
当然,您可能不想对所有 View 都进行这种处理;您可以在上述逻辑中自由添加任何条件,以实现有条件的 View 保存和恢复。
您还应该考虑其他选择。看来您在这里混淆了问题。如果您真正关心的是限制与 View 处理相关的开销,您应该考虑
无状态 View ,JSF-2.2 的新增功能。无状态 View 选项允许您从 JSF View 保存机制中排除特定页面,只需在 f:view
上指定 transient="true"
。比手动修改 UIViewRoot
干净得多。这里需要注意的是,无状态 View 不能由依赖于状态保存的范围支持,即 @ViewScoped
。在无状态 View 中,将为每个回发重新创建 @ViewScoped
bean。 Ajax 功能在这种情况下也会受到影响,因为状态保存是 ajax 操作的支柱。
有选择地将标记组件设置为transient
transient 属性可用于所有 UIComponents
,这意味着,在每个 View 上基础上,您可以使用 transient="true"
标记特定组件,有效地为您提供与 1) 相同的好处,但范围要小得多。没有没有 ViewScoped 的缺点
编辑:出于某种原因,UIViewRoot#getViewId()
没有返回当前 View 的名称(这可能是一个错误)。或者,您可以使用
ExternalContext extCtxt = FacesContext.getCurrentInstance().getExternalContext();
String viewName = ((HttpServletRequest)extCtxt.getRequest()).getRequestURI(); //use this id as the key to store your views instead
关于google-app-engine - 如何在需要时保存和检索 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27039642/
如果我使用下面的代码,数据将为零 dispatch_async(dispatch_get_global_queue(0,0), ^{ UIImage *img = [[UIImage allo
fread来自 data.table包一般可以在读取文件时自动确定列分隔符( sep )。 例如,这里fread自动检测 |作为列分隔符: library(data.table) fread(past
因此,如果我有一个如下所示的数据框: A B C rowname1 4.5 4 3.2 rowname2 3 23
我有一个汽车模型的搜索数据库:“日产Gtr”,“Huynday Elantra”,“Honda Accord”等。 现在我还有一个用户列表和他们喜欢的汽车类型 user1喜欢:carId:1234,c
我正在使用 Javamail 来获取一些电子邮件数据。我将用户输入作为电子邮件 ID、imap 地址和密码并连接到 imap。然后我监视收件箱的电子邮件并查明此人是否在“收件人”或“抄送”中。 Ema
我有一些数据,我想根据差距统计来评估最佳簇数。 我阅读了 gap statistic 上的页面在 r 中给出了以下示例: gs.pam.RU Number of clusters (method '
我有一个用户名和密码组合,我将使用它通过 java 代码访问安全服务器。 我的想法是: 在外部存储加密凭据 执行时提示用户输入解密密码 在使用前将解密的凭据直接存储在字符数组中 使用凭据连接到数据库
这是 Firebase 数据:[Firebase 数据][1] 我必须从员工那里检索所有字段并将其存储在一个数组中。 现在数据更改 toast 消息即将到来,但已经很晚了。 Firebase.setA
我是 iOS 的新手,正在开发一个基本的应用程序,它目前正在使用 SSKeychain 和 AFNetworking 与 API 进行交互。当您使用我检索的应用程序登录并在我的 CredentialS
编辑:这个问题已经在 apphacker 和 ConcernedOfTunbridgeWells 的帮助下得到解决。我已更新代码以反射(reflect)我将使用的解决方案。 我目前正在编写一个群体智能
我是 C 的新手,我想编写一个程序来检查用户输入的单词是否合法。我已经在 stackoverflow 上搜索了建议,但很多都是针对特定情况的。请在我被激怒之前,我知道这个语法不正确,但正在寻找一些关于
我相信你们中的一些人编写过 C# 类,这些类必须从数据库设置密码/从数据库获取密码。 我假设敏感细节不会以明文形式显示。处理此类数据的推荐程序是什么?检索到的文本是否加密?您是否将 pws 存储在加密
我在 linux 上使用 2.7 之前的 python 版本,想知道如何检索 RUID? 2.7 及更高版本从 os 包中获得了 getresuid,但我似乎找不到 2.6 的等效项 最佳答案 您可以
我已经在 Android 中实现了一个存储对象的标准 LRUCache。每个键都是与存储的对象关联的唯一 ObjectId。我的问题是从缓存中检索对象的唯一方法是通过 ObjectId(无迭代器)。实
这已经被问过很多次了。解决方案(对我有用)是从 packages.config 文件(这就足够了)和 packages 文件夹中删除 *** 包。 这对我来说是一个糟糕的解决方案,因为每次我想安装一些
我有以下文字: #{king} for a ##{day}, ##{fool} for a #{lifetime} 以及以下(损坏的)正则表达式: [^#]#{[a-z]+} 我想匹配所有#{word
我正在寻找一种快速(如高性能,而不是快速修复)解决方案来持久化和检索数千万个小型(大约 1k)二进制对象。每个对象都应该有一个用于检索的唯一 ID(最好是 GUID 或 SHA)。额外的要求是它应该可
有没有办法获取 RegInit 的重置值?通过探测产生的类型的成员?我可以看到 RegInit 将返回类型(例如 UInt )。例如,我将有一个寄存器,我想通过 regmap 对其进行控制。 val
Iv 目前接手了一个项目,其中开发人员在某些表的 json 数组列中存储了 has many 关系。 产品表 ---------------------------- id | product | c
Git 会在任何地方记录推送到远程的历史吗? 我注意到我们能够在 Microsoft VSTS 中查看 Git 存储库的推送历史记录以及每次推送的相关提交。它甚至显示旧的、过时的提交,由于后来的强制推
我是一名优秀的程序员,十分优秀!