JSF学习笔记之Managed Beans

JSF实战指南:深入理解JSF框架与应用 JavaServer Faces (JSF) 是一个用于构建 Java Web 应用程序的服务器端组件框架。它将复杂的底层架构细节抽象化,允许开发者通过组件化的视图构建用户界面。JSF 的主要作用在于简化 Web 应用开发,提高开发效率,并使得应用程序可以轻松地处理用户交互。JSF 架构包含三个主要部分:用户界面组件模型、服务器端应用程序框架和可扩展的渲染器框架。 阅读详情

一.  Managed Beans


JSF 使用 Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在配置文件中,您只要修改配置文件,就可以修改 Bean 之间的相依关系。

1.  Backing Beans

JSF使用JavaBeans来达到程序逻辑与试图分离的目的,在JSF中的Bean其角色是属于Backing Bean,又称之为Glue Bean,其作用是真正的业务逻辑Bean级UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者将业务逻辑处理结果放置其中,等待UI组件取出当中的值并显示给使用者。JSF将BEan 的管理集中在faces-config.xml中,如下例子:

....
<managed-bean>
	<managed-bean-name>user</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.UserBean
</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
....
<managed-bean-class>设定所要使用的Bean类,<managed-bean-name>设定名称,可供我们在JSF页面上使用Expression Language来取得或设定Bean的属性,例如:

<h:inputText value="#{user.name}"/>
<managed-bean-scope>设定Bean的存活范围,你可以设定为request、session、与application,设定为request时,Bean的存活时间为请求阶段,设定为session则在使用者和应用程序交互开始,直到关闭浏览器或显示的结束会话为止(例如登出程序),设定为application时,则Bean会一直存活,直到应用程序关闭为止。

您还可以将存活范围设定为none,当设定为none时为在需要的时候生成一个新的Bean,例如您在一个method中想要生成一个临时的bean,就可以降至设定为none。

JSF页面上取得Bean 的属性,是使用JSF表示语言(Expression Language)。要注意的是,JSF表示语言是写成#{expression},而JSP表示语言是写成${expression},因为表示层可能使用JSP,所以必须区分,另外要注意的是,JSF标签上的属性设定时,只接受JSF表示语言。

2.  Beans的配置和设定

JSF预定义会读取faces-config.xml中关于bean的定义,如果想要自行定义文件名称,我们是在web.xml文件中提供javax,faces.CONFIG_FILES参数,例如:

<web-app>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>/WEB-INF/beans.xml</param-value>
</context-param>
...
</web-app>
定义文件可以有多个,中间以“,”区隔,例如:

/WEB-INF/navigation.xml,/WEB-INF/beans.xml
一个Bean最基本要定义的是Bean的名称、类与存活范围,例如:

<managed-bean>
	<managed-bean-name>user</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.UserBean
</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
如果要在其他类中取得Bean对象,则可以先取得javax.faces.context.FacesContext,它代表了JSF目前的执行环境对象,接着尝试取得javax.faces.el.ValueBinding对象,从中取得指定的Bean对象,例如:

FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding = context.getApplication().createValueBinding("#{user}");
UserBean user = (UserBean) binding.getValue(context);
如果只是要尝试取得Bean的某个属性,则可以如下:

FacesContext context = FacesContext.getCurrentInstance();
ValueBinding binding=context.getApplication().createValueBinding("#{user.name}");
String name = (String) binding.getValue(context);
如果有必要在启始Bean时,自动设置属性的初始值,则可以如下的设定:

....
<managed-bean>
	<managed-bean-name>user</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.UserBean
        </managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
	<managed-property>
		<property-name>name</property-name>
		<value>caterpillar</value>
	</managed-property>
	<managed-property>
		<property-name>password</property-name>
		<value>123456</value>
	</managed-property>
</managed-bean>
当然您的属性不一定是字符串值,也许会是int、float、boolean等等类型,您可以设定<value>值时指定这个值的字符串名称,JSF会尝试进行转换,例如设定为true时,会尝试使用Boolean.ValueOf()方法转换为boolean的true,以下是一些可能进行的转换:

类型转换
short、int、long、float、double、byte及相应的Wrapper类尝试使用Wrapper的valueOf()进行转换,如果
没有设置,则设为0
boolean 或 Boolean尝试使用Boolean.valueOf()进行转换,如果没
有设置,则设为false
char 或 Character取设置的第一个字符,如果没有设置,则设
为0
String 或 Object即设定的字符串值,如果没有设定,则为空
字符串new String("")

您也可以将它产生的Bean设定该给另一个Bean的属性,例如:
<managed-bean>
	<managed-bean-name>user</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.UserBean
</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
	<managed-bean-name>other</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.OtherBean
		<managed-bean-scope>session</managed-bean-scope>
		<managed-property>
			<property-name>user</property-name>
			<value>#{user}</value>
		</managed-property>
</managed-bean>
在上面的设定中,在otherBean中的user属性,接受了一个UserBean类型的对象,我们设定为前一个名称为user的UserBean对象。

2.3 Beans 上的 List,Map

如果您的Bean上有接受List或Map类型的属性,则您也可以在配置文件中直接设定这些属性的值,如下例子:
<managed-bean>
	<managed-bean-name>someBean</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.SomeBean
</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
	<managed-property>
		<property-name>someProperty</property-name>
		<list-entries>
			<value-class>java.lang.Integer</value-class>
			<value>1</value>
			<value>2</value>
			<value>3</value>
		</list-entries>
	</managed-property>
</managed-bean>
这是一个设定接受List类型的属性,我们使用<list-entries>标签指定将设定一个List对象,其中<value-class>指定将存入的List的类型,而<value>指定其值,如果是基本类型,则会尝试使用指定的<value-class>来作为Wrapper类。
设定Map的话,则是使用<map-entries>标签,例如:
<managed-bean>
	<managed-bean-name>someBean</managed-bean-name>
	<managed-bean-class>
		onlyfun.caterpillar.SomeBean
</managed-bean-class>
	<managed-bean-scope>session</managed-bean-scope>
	<managed-property>
		<property-name>someProperty</property-name>
		<map-entries>
			<value-class>java.lang.Integer</value-class>
			<map-entry>
				<key>someKey1</key>
				<value>100</value>
			</map-entry>
			<map-entry>
				<key>someKey2</key>
				<value>200</value>
			</map-entry>
		</map-entries>
	</managed-property>
</managed-bean>
由于Map对象是以key-value对的方式来存入的,所以我们在每一个<map-entry>中使用<key>与<value>标签来分别指定。
您也可以直接向设定Bean一样,设定一个List或者Map对象,例如在JSF范例中有这样的设定:
<managed-bean>
	<description>
		Special expense item types
</description>
	<managed-bean-name>specialTypes</managed-bean-name>
	<managed-bean-class>
		java.util.TreeMap
</managed-bean-class>
	<managed-bean-scope>application</managed-bean-scope>
	<map-entries>
		<value-class>java.lang.Integer</value-class>
		<map-entry>
			<key>Presentation Material</key>
			<value>100</value>
		</map-entry>
		<map-entry>
			<key>Software</key>
			<value>101</value>
		</map-entry>
		<map-entry>
			<key>Balloons</key>
			<value>102</value>
		</map-entry>
	</map-entries>
</managed-bean>
而在范例中另一个设定List的例子如下:
<managed-bean>
	<managed-bean-name>statusStrings</managed-bean-name>
	<managed-bean-class>
		java.util.ArrayList
</managed-bean-class>
	<managed-bean-scope>request</managed-bean-scope>
	<list-entries>
		<null-value />
		<value>Open</value>
		<value>Submitted</value>
		<value>Accepted</value>
		<value>Rejected</value>
	</list-entries>
</managed-bean>


JSF开发全套组件包免费下载与实战指南 <ui:insert name="title">默认标题</ui:insert> 阅读详情

相关推荐

JSF与Spring框架整合高级实践指南

本文还有配套的精品资源,点击获取 简介:JSF(JavaServer Faces)是一个用于构建Web应用程序的Java用户界面框架,而Spring是Java企业级应用开发中的核心框架,提供依赖注入、AOP等特性。本教程探讨如何整合JSF和Spring,通过实践和最佳实践来创建高性能的Web应用。重点包括利用Spring特性如事务管理、安全控制和Spring Boot集成,...

weixin_29781865的博客 1304

Managed Beans

1、Managed beans的编写 1)采用注释的方式进行实例化 @ManagedBean/@ManagedBean(name="beanName") @SessionScoped public class className{} 2)在faces-config.xml文件进行配置    userBean    完全类路径 session 2、给bean的属性注入值

zhang434的专栏 1605

手把手教你用Simulink给C2000配置SCI串口发送数据(附模型与避坑点)

本文详细介绍了如何使用Simulink为C2000系列微控制器配置SCI串口发送数据,包括硬件资源分配、模型搭建、参数设置及调试技巧。通过代码生成和串口通信实践,帮助开发者高效实现嵌入式系统开发,避免常见通信问题。

weixin_30831529的博客 295

JSF托管bean(Managed Bean)

JSF 托管bean(Managed Bean)是JSF注册的常规Java Bean类。托管bean包含getter和setter方法,业务逻辑。JSF托管bean作为UI组件的Model。 它存储JSF xhtml页面使用的数据。借助JSF框架,可以从JSF页面访问托管Bean。更多教程请访问http://www.manongzj.com 在JSF 1.2中,我们必须在JSF配置文件(如faces-config.xml)中注册受管理的bean。 从JSF 2.0可以使用注解注册管理bean。 使用XML

wuxiaopengnihao1的博客 675

DIY音频必备:手把手教你用AB类功放模块打造高保真桌面音响(含电路图)

本文详细指导如何利用AB类功放模块DIY高保真桌面音响,涵盖选型指南、核心元器件清单、电路搭建与焊接工艺,以及系统调试与音质优化技巧。AB类功放以其接近A类功放的音质和B类功放的效率,成为音频爱好者的理想选择,适合有一定电子基础的实践者。

weixin_42665725的博客 443

使用 Cadence ams 仿真器 对 混合信号电路 进行仿真

文章目录Cadence 基于ams仿真器的混合信号电路仿真建立数字(Digital)模块建立 Analog - Digital 混合仿真原理图建立 Analog - Digital 混合仿真config文件配置混合信号电路仿真环境针对混合信号电路demo进行仿真 Cadence 基于ams仿真器的混合信号电路仿真 你好,这里是一篇关于使用 Cadence 软件通过 ams 仿真器对混合信号电路(D...

mymatin1004的博客 2万+

Spring 定义 Bean 的三种注解

大多数的人知道, @Component 注解作用在类上,可以将该类添加进spring容器。但少有人知,@ManagedBean、@Named 也能有同样的效果。 因为在 spring 源码种看到 ManagedBean、Named 的存在,所以好奇的想体验一下是不是真的有相同的效果。 可在 Maven 插件地址 查找对应的 maven 依赖。 使用 @ManagedBean 需要使用 jsr-250 使用 @Named 需要使用 jsr-330 <dependencies> .

weixin_44245828的博客 1044

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

JSF Manage Bean详解

首先从Model1中的JavaBean说起,大家知道,Model1的基本架构就是JSP页面通过JavaBean访问数据层,那么JavaBean到底是什么东东呢?  其实JavaBean只是一个特别的Java类而已。在JavaBean中,对私有的域用getXXX和setXXX来实现存取,并且必须有一个无参数的构造函数,如下类就是一个JavaBean文件。package net.moon.beans;

温水中的青蛙 1375

安装anaconda3时出现错误:Failed to link extracted packages to D:\anaconda!...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1479

【四足机器人项目实战】四足机器人嵌入式硬件设计

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、电源管理板设计及制作二、通讯中继板设计及制作三、力控无刷电机驱动板设计及制作1.磁场定向控制FOC控制原理2.电机转子位置、速度检测原理3.硬件CAN通讯原理 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对四足机器人–嵌入式硬件设计做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、电

qq_35635374的博客 1万+

JSF-ManagedBean中获得另外一个ManagedBean

如何在ManagedBean中获得另外一个ManagedBean &lt;1&gt; 使用依赖注入     在定义managed beans的faces配置文件中,一个managed bean可以作为另一个managed bean的初始化属性: xml 代码    &lt;managed-bean&gt;        &lt;managed-bean-name&gt;nee...

kkiiiu的专栏 369

沁恒CH32V30X学习笔记02--GPIO的使用教程及2次封装驱动

刚复位后,GPIO 口运行在初始状态,这时大多数 IO 口都是运行在状态所有的 GPIO 口都可以被配置外部中断输入通道,但一个外部中断输入通道最多只能映射到一个GPIO 引脚上,且外部中断通道的序号必须和 GPIO 端口的位号一致,,两方都是一对一的关系。复用功能。

Car12 706

JSF学习笔记四-Managed Beans

 Managed Beans     JSF 使用Bean 来达到逻辑层与表现层分离的目的,Bean 的管理集中在配置文件中,您只要修改配置文件,就可以修改Bean之间的依赖关系    一、Backing Bean;Glue Bean,其作用是在真正的业务逻辑Bean 及UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者是将业务处理结果放置其中,等待UI

fjeros的专栏 1465

使用GitLab限制开发者使用CI/CD的权限,三种方案

使用三种方案来限制开发人员的CI/CD权限。

知无涯 5096

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JSF Managed Beans 管理bean

Backing BeansJSF使用 JavaBean 来达到程序逻辑与视图分离的目的,在JSF中的Bean其角色是属于Backing Bean,又称之为Glue Bean,其作用是在真正的业务逻辑Bean及UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者是将业务处理结果放置其中,等待UI组件取出当中的值并显示结果给使用者。JSF将Bean的管理集中在...

折桂博客 231

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JSF入门八(Managed Beans)

只要修改配置文件,就可以修改 Bean 之间的相依关系。   一、Backing Beans JSF将Bean的管理集中在faces-config.xml中,一个例子如下: .... &lt;managed-bean&gt; &lt;managed-bean-name&gt;user&lt;/managed-bean-name&gt; &lt;managed-bean-class&gt; onlyfun.caterpillar.

积累与坚持 168

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JSF教程二 Managed Beans

1)web.xml中配置          javax.faces.CONFIG_FILES       /WEB-INF/faces-config.xml  有很多个就用逗号隔开        ...    2)   如果要在其它类别中取得 Bean 对象,则可以先取得javax.faces.context.FacesContext,它代表了 JSF 目前的执行环境对象,接着尝试取得 j

723

Improving JSF Security Configuration With Secured Managed Beans

太晚了,有空再看,明天还要上课...http://blogs.sun.com/enterprisetechtips/entry/improving_jsf_security_configuration_withImproving JSF Security Configuration With Secured Managed BeansBy Vinicius SengerJava E

yunfu3520的专栏 933

jsf入门教程

1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么。 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web应用程序开发人员至今不可避免的必须处理 HTTP的细节,而HTTP无状态的 (stateless)本质,与传统应用程序必须维持程序运行过程中的信息有明显的违背,再则We

蓝魔 4804

JSF中不同种类的managed-beans

在icefaces的博客上看到一篇文章——Making distinctions between different kinds of JSF managed-beans ,将JSF的managed bean进行了分类,可以借鉴参考一下:     Managed-Bean Type Nickname Typical Scope...

trapeze的专栏 215

managed bean

1 从选项中选择值(菜单,列表,单选按钮) 菜单之类的通常使用两个bean属性:一个是列表选项,另一个是提交时发送的值: 1.1 输入类型的选择: h:selectOneMenuh:selectOneListbox(注意box的b为小写)h:selectOneRadio:如果使用,则单选按钮垂直排列;如果使用layout=”lineDir

BlingBling 918

在JSF DataTable 中实现多选

参考了http://blog.csdn.net/Samland/archive/2006/09/17/1232585.aspx。决定通过修改值对象的方法在JSF DataTable中实现多选的功能。首先,给数据模型对象bean中添加一个boolean的属性selected.public class Item {   private Integer id;  ...  private boolean

Icyfire Talks 1749
上一篇: 随笔2011/12/01
下一篇: 映射表
IMFuckingHigh
博客等级 码龄18年 85粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值