jsf框架缺点是什么?jsf如何托管Bean?

阳光 2022-02-23 16:35:29 java常见问答 6066

JSF是一种用于构建Java Web 应用程序的标准框架,它提供了一种以组件为中心的用户界面构建方法,从而简化了Java服务器端应用程序的开发。那jsf框架缺点是什么?下面来我们就来给大家讲解一下。

作为JavaEE的一部分,Oracle支持JavaServerFaces。虽然这不是Java快速开发的最好框架,但是因为Oracle提供了大量的文档所以很容易上手。如果你不离开JavaEE环境,JSF没有外部依赖项,但功能很强大,它拥有的丰富的库和工具(包括一个易于创建用户界面的工具集),无论你的应用程序看起来有多么复杂,它都可以支持。

优点和缺点:

如上所述,JSF是JavaEE的一个组成部分。因此,开发人员可以利用IDE软件套件以及来自行业领先供应商的高水准的支持。

但是事情都有两面性,JavaServerFaces太庞大,所以没有Web开发经验或者技术不纯熟的人可能难以掌握。

jsf如何托管Bean?

请看看下面一段示例代码 :

public class User
{
    private String name;
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
}

您可以通过以下方式使用此bean。

通过配置成XML文件。

通过使用注释。

a:通过XML文件配置托管Bean:

<managed-bean>  
    <managed-bean-name>user</managed-bean-name>  
    <managed-bean-class>User</managed-bean-class>  
    <managed-bean-scope>session</managed-bean-scope>  
</managed-bean>

在xml文件配置bean是比较旧方法。 在这种方法中,我们必须创建一个名为faces-config.xml的xml文件,JSF提供了配置bean的标签。

在上面的例子中,我们列出了bean-name,bean-class和bean-scope。 所以,它可以在项目中访问。

b:使用注释配置托管Bean:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
@ManagedBean // Using ManagedBean annotation
@RequestScoped // Using Scope annotation
public class User
{
    private String name;
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
}

类中的@ManagedBean注解自动将该类注册为JavaServer Faces的资源。 这种注册的托管bean在应用程序配置资源文件中不需要托管bean配置项。

@ManagedBean将bean标识为名称属性中指定的名称的托管bean。如果未指定name属性,那么托管bean名称将默认为简单的类名称,其中第一个字母小写。 在我们的情况下是helloWorld。

如果eager设置为“true”,则在请求之前创建托管bean。如果使用“lazy”初始化,只有在请求时才会创建bean。

这是应用程序配置资源文件方法的替代方法,并减少配置托管bean的任务。

@RequestScoped注释用于提供托管的范围。 您可以使用注解来定义bean将被存储的范围。
@ManagedBean(name = "helloWorld", eager = true)
@RequestScoped
public class HelloWorld
{
    @ManagedProperty(value = "#{message}")
    private Message message;
    ...
}

您可以对bean类使用以下范围:

应用程序(@ApplicationScoped):应用程序范围在所有用户中保持不变,与Web应用程序的交互。( bean只要Web应用程序生存。 它在第一个HTTP请求或Web应用程序启动时创建,并且在@ManagedBean中设置属性eager = true,并在Web应用程序关闭时被销毁)。

会话(@SessionScoped):会话范围在Web应用程序中的多个HTTP请求中保持不变。(bean只要HTTP会话生存。 它在第一个HTTP请求时创建,并在HTTP会话无效时被销毁)。

视图(@ViewScoped):在用户与Web应用程序的单个页面(视图)进行交互时,视图范围仍然存在。(bean只要用户在浏览器窗口中与同一JSF视图进行交互即可。 它根据HTTP请求创建,并在用户导航到其他视图时被销毁)。

请求(@RequestScoped):在Web应用程序中的单个HTTP请求期间,请求范围仍然存在。(bean只要HTTP请求响应就行。它根据HTTP请求创建,并在与HTTP请求相关联的HTTP响应完成时被销毁)。

无(@NoneScoped):表示未为应用程序定义作用域。(bean与单个表达式语言(EL)求值时间一样长。 在EL求值评估时创建,并在EL求值评估后被销毁)。

自定义(@CustomScoped):用户定义的非标准作用域。 其值必须配置为java.util.Map,自定义范围很少使用。(bean只要在为此范围创建的自定义Map中的bean的条目生效)。

急切管理Bean

托管bean默认是懒惰的。 这意味着,只有在从应用程序发出请求时才会去实例化bean。

如果想自动提前强制将bean实例化,那么可在应用程序启动时,可以强制将bean实例化并放置在应用程序(@ApplicationScoped)范围内。您需要将托管 bean 的eager属性设置为true,如以下示例所示:

@ManagedBean(eager=true)

@ManagedProperty注释

JSF是一个简单的静态依赖注入(DI)框架。 @ManagedProperty注释标记被托管的bean的属性以注入另一个受托管的Bean。

这就是JSF托管Bean的过程,jsf可以简化Java服务器端应用程序的开发,但是凡事都有两面性,jsf太庞大,没有相关经验的开发人员很难把控好!最后大家如果想要了解更多java架构师知识,敬请关注奇Q工具网。

推荐阅读:

redis如何使用?redis使用场景以及优缺点

springmvc框架如何执行?springmvc怎么写Hello World应用程序?

java中接口和抽象类的区别是什么?Java接口如何实现?