首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将DeltaSpike @WindowScoped beans移植到JSF 2.2+?

DeltaSpike是一个开源的JavaEE扩展框架,它提供了一些有用的功能和工具,用于简化JavaEE应用程序的开发。其中之一是@WindowScoped注解,它允许我们在基于浏览器窗口的上下文中管理bean的生命周期。

要将DeltaSpike @WindowScoped beans移植到JSF 2.2+,可以按照以下步骤进行操作:

  1. 确保你的项目中已经引入了DeltaSpike和JSF的相关依赖。
  2. 创建一个自定义的@WindowScoped注解,用于替代DeltaSpike的注解。例如:
代码语言:txt
复制
import javax.enterprise.context.NormalScope;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@NormalScope(passivating = true)
public @interface WindowScoped {
}
  1. 创建一个实现javax.enterprise.context.spi.Context接口的自定义上下文,用于管理@WindowScoped beans的生命周期。例如:
代码语言:txt
复制
import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.Contextual;
import javax.enterprise.context.spi.CreationalContext;
import javax.faces.context.FacesContext;

public class WindowScopedContext implements Context {

    @Override
    public Class<? extends Annotation> getScope() {
        return WindowScoped.class;
    }

    @Override
    public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext) {
        Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        T bean = (T) sessionMap.get(contextual);
        if (bean == null) {
            bean = contextual.create(creationalContext);
            sessionMap.put(contextual, bean);
        }
        return bean;
    }

    @Override
    public <T> T get(Contextual<T> contextual) {
        Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
        return (T) sessionMap.get(contextual);
    }

    @Override
    public boolean isActive() {
        return true;
    }
}
  1. 在faces-config.xml文件中注册自定义上下文。例如:
代码语言:txt
复制
<faces-config xmlns="http://xmlns.jcp.org/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd"
              version="2.2">

    <application>
        <el-resolver>org.apache.deltaspike.jsf.spi.scope.window.WindowClientWindowAwareElResolver</el-resolver>
        <el-resolver>org.apache.deltaspike.jsf.spi.scope.window.ClientWindowAwareElResolver</el-resolver>
        <el-resolver>org.apache.deltaspike.jsf.spi.scope.window.DefaultClientWindowAwareElResolver</el-resolver>
    </application>

    <factory>
        <faces-context-factory>org.apache.deltaspike.jsf.impl.scope.window.WindowContextFactory</faces-context-factory>
    </factory>

    <lifecycle>
        <phase-listener>org.apache.deltaspike.jsf.impl.scope.window.WindowScopePhaseListener</phase-listener>
    </lifecycle>

    <application>
        <view-handler>org.apache.deltaspike.jsf.impl.view.ViewHandlerWrapper</view-handler>
    </application>

    <application>
        <default-render-kit-id>PRIMEFACES_MOBILE</default-render-kit-id>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

    <application>
        <resource-handler>org.apache.deltaspike.jsf.impl.resource.DeltaSpikeResourceHandler</resource-handler>
    </application>

</faces-config>
  1. 现在,你可以在JSF的Managed Bean中使用@WindowScoped注解来标记需要在浏览器窗口上下文中管理的bean了。例如:
代码语言:txt
复制
@WindowScoped
public class MyWindowScopedBean implements Serializable {
    // Bean properties and methods
}

这样,你就成功地将DeltaSpike @WindowScoped beans移植到JSF 2.2+中了。

对于更多关于DeltaSpike和JSF的信息,你可以参考以下链接:

  • DeltaSpike官方网站:https://deltaspike.apache.org/
  • JSF官方网站:https://javaee.github.io/javaserverfaces-spec/
  • 腾讯云相关产品和产品介绍链接地址:(根据实际情况填写)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Eclipse、NetBeans、IntelliJ

三个IDEs中,Eclipse是唯一个存在多个版本,从基本的版本预先打包好的带额外的开源插件(像EasyEclipse)和开源/商业结合的(像MyEclipse)。...编辑器中提供了对backing beans属性的代码补全功能。...NetBeans Visual Web Pack提供了一个交互式的解决方案通过从Sun JavaStudio Creator直接移植NetBeans的特性来构建JSF应用,这包括用来构建web页面的一个...Matisse样式的GUI构造器,并带有丰富的JSF控件,这些JSF控件扩展了基本的JSF RI集,同时也支持数据绑定(直接依靠数据库查询甚至通过JPA/Hibernate)。...MyEclipse扩展了这些功能通过提供session beans,消息驱动beans向导和容器管理持久化beans,同时也被XDoclet驱动。

2K30

从开发角度看四类企业应用架构1: 通过Maven编译并运行一个Java应用

由于Java EE标准,应用程序可以跨Java EE兼容应用程序服务器移植。...而基于Web的版本则部署符合Java EE的应用程序服务器。 “待办事项列表应用程序”示例打包为部署应用服务器(如EAP)的WAR文件。...第二类:结合网络和业务逻辑组件的架构 在此体系结构中,客户端层中的浏览器与由Servlet、JSP或JSF页面组成的Web层进行交互,负责呈现用户界面、控制页面流和安全性。...核心业务逻辑托管在独立的业务逻辑层中,该层具有Java EE组件,如EJB、实体Bean(JPA)和消息驱动Bean(Message Driven Beans,MDB)。...截止目前,一个java应用通过Maven编译打包、运行成功。

1.4K20

awesome-java-cn

官网 JavaServer Faces:Mojarra是JSF标准的一个开源实现,由Oracle开发。官网 JavaServer Pages:支持自定义标签库的网站通用模板库。...官网 Apache DeltaSpike:CDI扩展框架。官网 Dagger2:编译时注入框架,不需要使用反射。官网 Guice:可以匹敌Dagger的轻量级注入框架。...官网 RESTEasy:经过JAX-RS规范完全认证的可移植实现。官网 RestExpress:一个Java类型安全的REST客户端。官网 RestX:基于注解处理和编译时源码生成的框架。...官网 Selenium:为Web应用程序提供可移植软件测试框架。...官网 PrimeFaces:JSF框架,提供免费和带支持的商业版本。包括若干前端组件。官网 Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序。

4.1K80

应用服务器到底是个啥?| 从开发角度看应用架构2:对Java EE应用进行打包和部署!

应用程序服务器提供诸如并发性、分布式组件架构、多平台可移植性、事务管理、Web服务、数据库对象关系映射(ORM)、异步消息传递以及企业应用程序安全性等功能。...Java EE应用程序服务器中有两种主要的容器类型(我们可以简单地把容器理解成线程池): Web容器:部署和配置Web组件,例如Servlets,JSP,JSF和其他Web相关资产。...EE的基于Web的技术,如Servlet、Java Server Pages、Java Server Faces、CDI、JPA、JAX-RS、WebSockets和Enterprise Java Beans...三种最常见的部署类型是: JAR文件:JAR文件可以包含Plain Old Java Object(POJO)类,JPA Entity Beans、实用程序Java类、EJB和MDB。...EAP,该插件提供了部署和取消部署应用程序EAP的功能。

3.1K20

Spring框架参考手册_5.0.0_中文版_Part I_第二章

spring-core和spring-beans模块提供了框架的基础结构部分,包含控制反转(IoC)和依赖注入(DI)功能。BeanFactory是工厂模式的高级实现。...上下文(spring-context)模块建立在由Core模块和Beans模块提供的坚实基础上:它是在类似于JNDI注册表式的框架风格模式中访问对象的一种方法。...上下文模块继承了Beans模块的功能,并添加了对国际化(例如使用资源捆绑)、事件传播、资源加载和上下文透明创建(例如通过Servlet容器)的支持。...现有的采用Struts,Tapestry,JSF或其它UI框架构建的前端可以与基于Spring的中间层进行集成,这可以让你使用Spring的业务功能。...所有版本的Spring采用同一个日志库:移植是容易的,因为即使应用扩展了Spring但保留了向后兼容性,这一点对用户来说很重要。

47120

Java资源大全中文版

官网 JavaServer Faces:Mojarra是JSF标准的一个开源实现,由Oracle开发。官网 JavaServer Pages:支持自定义标签库的网站通用模板库。...官网 Apache DeltaSpike:CDI扩展框架。官网 Dagger2:编译时注入框架,不需要使用反射。官网 Guice:可以匹敌Dagger的轻量级注入框架。...官网 RESTEasy:经过JAX-RS规范完全认证的可移植实现。官网 RestExpress:一个Java类型安全的REST客户端。官网 RestX:基于注解处理和编译时源码生成的框架。...官网 Selenium:为Web应用程序提供可移植软件测试框架。...官网 PrimeFaces:JSF框架,提供免费和带支持的商业版本。包括若干前端组件。官网 Ratpack:一组Java开发函数库,用于构建快速、高效、可扩展且测试完备的HTTP应用程序。

2.4K20

三分钟数据持久化:Spring Boot, JPA 与 SQLite 的完美融合

在这里,我们将向你展示如何将 Spring Boot 的便捷性、JPA 的强大查询能力和 SQLite 的轻量级特性结合在一起,实现快速而又优雅的数据管理。...轻量级:SQLite很小巧,不需要独立服务器,便于集成应用中。 2. 零配置:启用 SQLite 无需复杂配置,只需指定一个文件路径存放 DB 文件,简化了数据库的设置流程。 3....便于移植:数据库是单一文件,方便备份和在不同环境间迁移。 4. 跨平台:SQLite 支持各种操作系统,容易实现应用的跨平台运行。 5. 性能良好:对于小型应用,SQLite 提供足够的读写性能。...org.apache.commons.lang3.RandomStringUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired...RxaivBHlyJCxtOEv, status=active, createdAt=2024-02-27T20:01:04.144, updatedAt=2024-02-27T20:01:04.144) 查询成功,回显了查询的用户信息

20810
领券