我想在JSF应用程序中配置自定义范围。我们在WebSphere8.0/8.5上使用JSF2.0和Primefaces 5.3.17。目前,我们有RequestScope核心和SessionScope模型bean以及命名注释。模型通过注入传递到核心。现在,我们需要提供一种在许多浏览器选项卡上与模型并行工作的方法。我们的想法是使用过滤器将生成的选项卡id注入到响应中,然后,稍后从post请求中提取它,并将其传递给扩展,以便从映射中加载/创建所需的bean,每个视图的bean存储在会话中。我认为过滤器可以正常工作——在不改变范围的情况下,生成的选项卡Id被注入表单等的action属性中,并且没有错误。
但问题是,当我为一些模型bean设置新的自定义范围以证明它是否有效时。我有一个例外,“jquery未定义”。对我来说,Java部分看起来不错——在上下文中创建必需的bean,然后在核心中使用相同的bean。但事实证明,每个负责加载js的请求都会得到空响应。我没有看到任何stacktrace,我完全不知道为什么会发生这种情况,如何以及在哪里找到这种行为的原因。
一些代码示例:
语境:
public class TabScopeContext implements Context, Serializable {
/**
* SerialId.
*/
private static final long serialVersionUID = -558257182139134232L;
public TabScopeContext() {}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public <T> T get(Contextual<T> contextual) {
final Bean<T> bean = (Bean<T>) contextual;
Map<String, Object> beans = getBeansForCurrentTab();
if (beans.containsKey(bean.getName())) {
return (T) beans.get(bean.getName());
} else {
return null;
}
}
private Map<String, Object> getBeansForCurrentTab() {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
Map<Integer, Map<String, Object>> tabScope;
if (isTabScopeAlreadyInSession(session)) {
tabScope = getTabScope(session);
} else {
tabScope = initScopeInSession(session);
}
Integer viewId = TabScopeViewIdPersister.getInstance().getViewId();
if (isViewAlreadyInScope(viewId, tabScope)) {
return tabScope.get(viewId);
} else {
return initBeansForView(tabScope, viewId);
}
}
private Map<String, Object> initBeansForView(Map<Integer, Map<String, Object>> tabScope, Integer viewId) {
Map<String, Object> beans = new HashMap<String, Object>();
tabScope.put(viewId, beans);
return beans;
}
private boolean isViewAlreadyInScope(Integer viewId, Map<Integer, Map<String, Object>> tabScope) {
return tabScope.containsKey(viewId);
}
private Map<Integer, Map<String, Object>> initScopeInSession(HttpSession session) {
Map<Integer, Map<String, Object>> beansPerView = new HashMap<Integer, Map<String, Object>>();
session.setAttribute(TabScope.NAME, beansPerView);
return beansPerView;
}
private boolean isTabScopeAlreadyInSession(HttpSession session) {
return getTabScope(session) != null;
}
@SuppressWarnings("unchecked")
private Map<Integer, Map<String, Object>> getTabScope(HttpSession session) {
return (Map<Integer, Map<String, Object>>) session.getAttribute(TabScope.NAME);
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext) {
final Bean<T> bean = (Bean<T>) contextual;
Map<String, Object> scopeBeansMap = getBeansForCurrentTab();
if (scopeBeansMap.containsKey(bean.getName())) {
return (T) scopeBeansMap.get(bean.getName());
} else {
T t = bean.create(creationalContext);
scopeBeansMap.put(bean.getName(), t);
return t;
}
}
/**
* {@inheritDoc}
*/
@Override
public Class<? extends Annotation> getScope() {
return TabScope.class;
}
/**
* {@inheritDoc}
*/
@Override
public boolean isActive() {
return true;
}
}
分机:
public class TabScopeContextExtension implements Extension {
public void registerContext(@Observes AfterBeanDiscovery event) {
event.addContext(new TabScopeContext());
}
}
范围:
@NormalScope(passivating=true)
@Target({TYPE, FIELD, METHOD })
@Retention(value = RUNTIME)
@Documented
@Inherited
public @interface TabScope {
public static final String NAME = "TAB_SCOPE";
}
有人知道这个问题如何与范围更改联系起来,以及如何解决它吗?提前感谢您的帮助。
事实证明,这是浏览器缓存的问题。清除缓存后,它似乎开始工作。
问题内容: 我想创建自己的自定义范围bean,它将使用HTTP会话(类似于Flash作用域)。 根据Spring手册,我需要实现org.springframework.beans.factory.config.Scope接口 我的问题是如何在此bean中获取HTTP会话?我知道,如果我在ServletContext范围内创建bean,则将实现ServletContextAware接口。 请帮忙 :
问题内容: 我有一张可以容纳一年中所有天/月的表 例如 我有一张表格,显示来自不同数据集的日期范围 例如 我如何比较这两个表以显示该特定月份的数据集中缺少哪些日期 对于上面示例中的数据集所在的示例,EG缺少日期范围01/09/2013-19/09/2013 谢谢你的帮助! 问题答案: 您可以使用CTE并通过以下方式编写查询:
在尝试为Sublime Text 2编写自己的片段时,我遇到了以下两个问题: > 查找作用域键。我发现我可以逐个查看我的包并找到对声明的“scope”属性的引用。例如,在(我的HTML包中的一个文件)中,有以下两行: 因此,如果我希望我当前的片段在javascript文件上工作,我将我的范围定义为: 我假设所有这些范围键都是根据我安装的软件包即时定义的。Sublime Text是否在我可以更容易引
问题 你想定义一个数组的范围。 解决方案 在 CoffeeScript 中,有两种方式定义数组元素的范围。 myArray = [1..10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] myArray = [1...10] # => [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ] 要想反转元素的范围,则可以写成下面这样。 myLargeArray =
目前我正在尝试创建自定义按钮与自定义背景,重点是我想创建圆角边缘的按钮编程。这是我创建的代码: getscreenwidth和getscreenheight背后 结果是文本不见了 这方面有什么办法吗?