JSF EL 介绍
- 格式:doc
- 大小:60.50 KB
- 文档页数:5
JSF框架简介与实例JSF 体系结构:JSF 的主要优势之⼀就是它既是 Java Web 应⽤程序的⽤户界⾯标准⼜是严格遵循模型-视图-控制器 (MVC) 设计模式的框架。
⽤户界⾯代码(视图)与应⽤程序数据和逻辑(模型)的清晰分离使 JSF 应⽤程序更易于管理。
为了准备提供页⾯对应⽤程序数据访问的 JSF 上下⽂和防⽌对页⾯未授权或不正确的访问,所有与应⽤程序的⽤户交互均由⼀个前端FacesServlet(控制器)来处理。
JSF ⽣命周期:FacesServlet 充当⽤户和 JSF 应⽤程序之间的纽带。
它在明确限定的 JSF ⽣命周期(规定了⽤户请求之间的整个事件流)的范围内⼯作。
1.当JSF页⾯上的⼀个事件发⽣时(⽐如:⽤户单击了⼀个按钮),事件通知通过HTTP发往服务器。
服务器端使⽤FacesServet这个特殊的Servlet处理该通知。
2. FacesServlet⼀接收到⽤户的请求就创建⼀个FacesContext对象(JSF上下⽂,它存放了应⽤程序的所有数据)。
在处理过程中,主要修改的就是这个FaceContext对象。
3.接着就是处理过程,处理器是⼀个叫作Lifecycle的对象。
FacesServet把控制权转交给Lifecycle对象。
该对象分6个阶段来处理FacesContext对象以⽣成响应,最后将响应发回客户端。
Lifecycle对象处理JSP请求所需要的⼀系列动作称为请求处理⽣命周期。
过程状态图如下:由于请求处理⽣命周期⾥的应⽤请求值、处理验证、更新模型值和调⽤应⽤程序等阶段都可以在当前的请求对应的FacesContext实例中添加事件,因此,JSF实现必须在这些阶段后处理这些事件。
阶段说明恢复视图为选定的视图找到或创建组件树。
⼀旦⽤户单击JSP页⾯上的链接或按钮,就会启动此阶段。
JSF应⽤⾥的JSP页⾯被表⽰成⼀个组件树。
JSF实现会进⼀步将这些组件链接到事件处理程序和验证程序,并将视图保存在FacesContext对象中,以备后⾯的处理过程所⽤。
activit使用el表达式Activiti使用EL表达式EL(Expression Language)是一种用于在JavaServer Pages(JSP)和JavaServer Faces(JSF)中访问和操作数据的简单表达式语言。
在Activiti中,EL表达式也被广泛应用于流程定义和任务处理中。
EL表达式的语法类似于JavaScript和JSP中的表达式语言,使用${}来包裹表达式。
在Activiti中,EL表达式可以用于以下几个方面:1. 流程定义中的条件判断:在流程定义的连线上,可以使用EL表达式来判断流程走向。
例如,可以使用${user.age > 18}来判断用户的年龄是否大于18岁,从而决定流程的走向。
2. 任务处理中的变量设置:在任务处理过程中,可以使用EL表达式来设置任务的变量。
例如,可以使用${}来设置任务的执行人为用户的姓名。
3. 表单字段的值获取:在流程的表单中,可以使用EL表达式来获取表单字段的值。
例如,可以使用${}来获取表单中名为name的字段的值。
4. 表单字段的可见性控制:在流程的表单中,可以使用EL表达式来控制表单字段的可见性。
例如,可以使用${user.role == 'admin'}来判断用户的角色是否为管理员,从而决定某个字段是否可见。
使用EL表达式可以使流程定义和任务处理更加灵活和动态。
通过使用EL表达式,可以根据不同的条件来决定流程的走向,设置任务的执行人和变量,以及控制表单字段的可见性。
这样,就可以根据具体的业务需求来定制流程和任务的处理逻辑。
在Activiti中,EL表达式的使用非常简单。
只需要在相应的地方使用${}包裹表达式即可。
同时,Activiti还提供了一些内置的EL函数和变量,可以在表达式中直接使用。
例如,可以使用${activiti:currentUser()}来获取当前用户的信息。
总之,EL表达式是Activiti中非常重要的一部分,它可以帮助我们实现流程和任务的灵活处理。
大多数Java Web 框架一样,JSF 应用配置是通过XML 文件处理的,该文件通常称为faces-config.xml 。
在这个文件中,你可以配置应用所支持的场所、受管bean 、导航规则以及替换可插入的JSF 类。
你还可以在此文件中配置 UI 扩展(组件、呈现器、验证器以及转换器)和其他高级特征。
所有这些东西都可以在代码中设置,虽然这样做通常只在动态场合下才有用。
如果你不喜欢编辑XML 文件,可以用工具来进行。
有一个免费的配置文件编辑器叫做Faces Console ,它可以插入到许多流行的IDE 之中,也可以作为单独的程序运行。
Exadel 也提供了一个可以作为Eclipse plugin 的JSF Studio 产品,可以简化配置、导航和其他内容的编辑。
此外,大多数IDE 也对配置的某些部分甚至全部方面提供了可视化编辑器。
JSF Central 社区站点维护着一个JSF 工具的产品目录。
JSF 可以支持多个配置文件。
默认情况下,它会查找文件名为WEB-INF/faces-config.xml 的文件,并且这里实际上也是放置大部分应用配置的地方。
还可以通过javax.faces.CONFIG_ FILESS 上下文参数指定额外的配置文件,这个参数在想要将你的配置进行分割以便易于维护时是很有用的。
例如,两个不同的团队可能工作于具有不同配置文件的不同模块。
JSF 也要在JAR 文件(或者其他任何资源路径)中搜索名为META-INF/faces-config.xml 的配置文件;这将允许你或者第三方能够创建组件、呈现器、验证器、转换器的库,并且它们可以被你的应用自动注册。
所有应用配置文件都必须引用JSF 配置的文档类型定义(DTD ):(如果你使用的是JSF 1.0,URI 将是“/dtd/Web-facesconfig_1_0.dtd ”)。
图D-1解释了配置文件的基本结构。
下面的小节详细解释了DTD 的每个元素。
JSF标签一、简介JSF标准标签JSF提供了標準的HTML Renderer Kit,可以讓您搭配JSF元件輸出HTML文件,標準的HTML Renderer Kit主要包括了幾個類別:∙輸出(Outputs)其名稱以output作為開頭,作用為輸出指定的訊息或綁定值。
∙輸入(Inputs)其名稱以input作為開頭,其作用為提供使用者輸入欄位。
∙命令(Commands)其名稱以command作為開頭,其作用為提供命令或連結按鈕。
∙選擇(Selections)其名稱以select作為開頭,其作用為提供使用者選項的選取。
∙其它包括了form、message、messages、graphicImage等等未分類的標籤。
JSF標準HTML標籤包括了幾個共通的屬性,整理如下:除了共通的屬性之外,您還可以在某些元件上設定標籤HTML 4.01的屬性,像是size、alt、width等屬性,或者是設定DHTML事件屬性,例如onchange、onclick等等。
除了JSF的標準HTML標籤之外,您還需要一些標準核心標籤,這些標籤是獨立於Renderer Kit的,JSF並不限制在HTML輸出表示層,核心標籤可以搭配其它的Renderer Kit來使用。
詳細的HTML標籤或核心標籤的使用與屬性說明可以查詢Tag Library Documentation文件。
二、输出类标签輸出類的標籤包括了outputLabel、outputLink、outputFormat與outputText,分別舉例說明如下:outputLabel產生<label> HTML標籤,使用for屬性指定元件的client ID,例如:<h:inputText id="user" value="#{}"/><h:outputLabel for="user" value="#{}"/>這會產生像是以下的標籤:<input id="user" type="text" name="user" value="guest" /><label for="user">outputLink產生<a> HTML標籤,例如:<h:outputLink value="../index.jsp"/>value所指定的內容也可以是JSF EL綁定。
EL(Expression Language)是一种用于在JSP、JSF等技术中简化表达式求值的语言。
在EL中,我们常常需要判断一个字符串是否包含另一个字符串。
在本文中,我将探讨el表达式中判断是否包含某字符串的方法,并从简单到复杂逐步展开这个主题,以便更好地理解。
1. EL表达式简介EL表达式是在JSP、JSF等技术中经常使用的一种表达式语言,用于在页面中访问和操作JavaBean的属性。
它的语法简洁明了,使用起来非常方便。
我们可以通过`${}`来获取JavaBean中的name属性值。
2. 判断字符串是否包含某字符串的方法在EL中,判断一个字符串是否包含另一个字符串,可以使用`${fn:contains(string1, string2)}`方法来实现。
其中,string1为要被检查的字符串,string2为要检查是否包含的字符串。
该方法会返回一个boolean类型的值,表示string1是否包含string2。
3. 实际应用举例举个例子,假设我们有一个字符串`${fruit}`,我们想判断它是否包含"apple"这个子串,可以这样写`${fn:contains(fruit, 'apple')}`。
如果fruit包含"apple",则该表达式的值为true,否则为false。
4. 注意事项在使用`${fn:contains}`方法时,需要确保传入的两个参数都是字符串类型。
如果其中有一个参数不是字符串类型,将会抛出错误。
另外,判断时是否区分大小写取决于具体的环境配置,需要注意这一点。
5. 个人观点和理解EL表达式中判断是否包含某字符串的方法非常简单且实用。
它可以在页面上轻松地实现字符串的包含关系判断,而不需要在后台Java代码中编写繁琐的判断逻辑。
当然,在实际应用中,我们也需要注意参数类型和大小写敏感性等细节,以确保程序的稳定性和可靠性。
jsf生命周期JSF是基于事件驱动的,首先介绍JSF的事件侦听。
介绍中我仅仅给大家提供简单的场景。
不过我需要首先申明,思考这些事件的时候,你最好先用C/S架构下的模式考虑她的运作模式,再用web下js调度动作的方式去认识执行过程。
1)动作事件:Action Event:普通动作响应actionEvent是最普通的事件,任何command组件(button,link等,请参见UICommand)通过注册actionListener均可出发此事件侦听响应,简单说,用户有意义的操作,即可触发。
2)即时事件:Immediate Event:立即处理,不验证/转换/更新模型值(即bean不会保存属性)即时事件,立即触发,在JSF生命周期中,让恢复试图之后,获取请求值,立即触发。
验证、转化、更新模型值被略过,当然更多的情况下,你需要一个为被注册的UI组件binding到后台bean中,别忘了,你使用即时事件的初衷是什么??就是我只想让程序关注此组件,并排斥其他组件或者级联组件的操作。
场景:单一表单中,使用“检测用户名是否存在”。
立即时间,常用来做bean层面即时服务,以执行action为主要目的。
3)值改变事件:Value Change Event:选择UI值改变后,级联调度.如果国际化中选择语言.值改变事件,如果一个输入(UIInput)、选择(UISelects)组件的值发生改变,将会执行的侦听。
所谓的值改变,就是表单中local值和submit 值发生偏移,local值就是页面渲染时上一个生命周期中传递的值,简单说就是表单中原来展示的值(server端生成的组件值,在周期中编码进去)。
submit值,就是面向用户或者操作者主动输入的客户端值。
比如:表单展示时,server端为一个下拉菜单赋值为1(local值),如果用户选择了2(submit值).请你用相同的思维去考虑输入框。
如果值改变,那么就会被执行,最好的场景就是:国际化中选择语言,然后把最新的语言元素,广播到整个站点。
Jsf前端知识1.JSF 体系结构JSF 的主要优势之一就是它既是Java Web 用户界面标准又是严格遵循模型-视图-控制器(MVC) 设计模式的框架。
用户界面代码(视图)与应用程序数据和逻辑(模型)的清晰分离使JSF 应用程序更易于管理。
为了准备提供页面对应用程序数据访问的JSF 上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”servlet(控制器)来处理。
2.JSP引入标签库基本标签<%@ taglib uri="/jsf/html" prefix="h" %><%@ taglib uri="/jsf/core" prefix="f" %>JSF的core与html标签库,core是有关于UI组件的处理,而html则是有关于HTML的进阶标签其他标签库支持<%@ taglib uri="/tomahawk" prefix="t"%>tomahawk为myfaces额外提供的标签库之一3.导航Navigation在JSF中是根据faces-config.xml中<navigation-rule>设定,以决定在符合的条件成立时,该连结至哪一个页面,一个基本的设定如下<navigation-rule><from-view-id>/login.jsp</from-view-id><navigation-case><from-outcome>success</from-outcome><to-view-id>/success.jsp</to-view-id></navigation-case><navigation-case><from-outcome>failure</from-outcome><to-view-id>/failure.jsp</to-view-id></navigation-case></navigation-rule>在<navigation-rule>中的<from-view-id>是个选择性的定义,它规定了来源页面的条件,<navigation-case>中定义各种导览条件,<from-outcome>定义当窗体结果符合的条件时,各自改导向哪一个目的页面,目的页面是在<to-view-id>中定义。
ExpressionLanguage 2.1 Specification注:此文档由mErcy翻译JSP2.1EL规范而来,转载请声明出处,不得用于商业性质。
1.1 EL表达式:EL表达式规定为:eval-expression和literal-expression,同时EL表达式支持Compositeexpressions,很多EL表达式(eval-expressions和literal-expressions)被聚合在一起。
EL表达式被解析成数值表达式和方法表达式。
其中,取值表达式去引用一个值,而方法表达式则是关联一个方法。
一旦被解析之后,表达式能够被优化地计算一次或多次。
下面我们来分为:eval-expression、literal-expression、Compositeexpressions来讲述1.1.1Eval-expressionEval-expression是以使用${expr}或者#{expr}结构的形式构成。
两种方式都是相同的方式,能很好被解析和计算,尽管它们在使用时有着不同的意义从技术方面来说。
从J2EE层规范协定来说,${expr}结构是直接计算而#{expr}结构则是延期计算,这种界定符号指出了在J2EE层两种表达式类型的语义上面的区别。
#{expr}这种界定符号被称为延迟计算是因为直到系统需要的时候才计算。
而${expr}这种界定符号则是在JSP页面编译的时候就计算,就是为什么叫做直接计算的原因。
1.1.1.1作为取值表达式的计算表达式当解析成一个取值表达式的时候,eval-expression能被计算成左值和右值。
若在EL中有等号操作符号出现,右值是类型出现在等号的右边的表达式,左值同理。
右值比如:<input type="text"value="${}"/><h:form>以下面这个例子为例:<h:inputTextid="email"value="#{checkOutFormBean.email}"size="25"maxlength="125"validator="#{checkOutFormBean.validateEmail}"/></h:form>当表单被提交的时候,在申请计算的阶段,Faces计算EL表达式#{checkOutFormBean.validateE mail}作为一个数据接口的引用,这个数据结构的数值是被一个表单相关联的输入参数设置。
高程el用法高程EL(Expression Language)是一种用于Web应用程序开发的标记语言,它可以用于JSP(Java Server Pages)和JSF(JavaServer Faces)等技术中。
高程EL提供了一种方便的方式来访问和操作应用程序中的数据,同时还能够进行条件判断和循环控制等操作。
本文将介绍高程EL的基本用法和一些常见的应用案例。
一. 高程EL的基本语法1. 变量访问高程EL可以通过${}来访问变量。
比如,如果有一个名为"username"的变量,可以使用${username}来获取该变量的值。
2. 属性访问除了访问变量,高程EL还支持访问JavaBean的属性。
通过使用"."运算符,可以从一个对象中获取属性的值。
例如,${}可以用来获取一个叫做"user"的JavaBean对象的"name"属性的值。
3. 方法调用高程EL也可以调用JavaBean中的方法。
通过在对象后面添加"()",可以调用该对象的方法,并获取返回值。
例如,${user.getName()}会调用"user"对象的"getName()"方法,并返回其返回值。
4. 运算符高程EL支持各种常见的运算符,包括算术运算符(+、-、*、/等)、关系运算符(>、>=、<、<=等)、逻辑运算符(&&、||、!等)和三元条件运算符(?:)等。
可以通过这些运算符来进行各种复杂的表达式计算。
二. 高程EL的应用案例1. 表达式计算高程EL可以用于计算简单或复杂的表达式。
例如,可以使用${1+2}来计算1加2的结果,得到3。
也可以使用${user.age >= 18 ? '成年人' : '未成年人'}来根据用户的年龄判断其成年与否。
el表达式三目运算符-回复什么是EL表达式三目运算符?EL表达式(Expression Language)是一种用于在JSP或JavaServer Faces(JSF)页面中访问数据的语言。
它提供了一种简单的方式来在页面上嵌入表达式,从而实现动态数据的显示和处理。
而其中的三目运算符在EL表达式中被广泛使用,使得我们能够根据特定的条件来选择不同的结果。
三目运算符,也称为条件运算符,是一种可以根据给定的条件来选择执行不同的操作的运算符。
它的语法形式为:condition ? expression1 : expression2 。
在EL表达式中使用三目运算符具有如下的语法规则:{condition ? expression1 : expression2}其中,condition是一个布尔表达式,而expression1和expression2是要根据condition的结果进行选择的两个表达式。
当condition为true时,三目运算符返回expression1的值;当condition 为false时,三目运算符返回expression2的值。
三目运算符可以嵌套使用,以实现更复杂的条件判断和处理。
例如:{gender == 'male' ? '先生' : '女士'}上述代码中,如果gender的值为'male',则返回'先生';如果gender的值为'female',则返回'女士'。
EL表达式的三目运算符不仅可以用于判断条件,还可以用于执行不同的操作。
例如:<form method="post" action="{isAdmin ? 'deleteUser' :'viewUser'}">上述代码中,如果isAdmin为true,表单的提交动作为'deleteUser';如果isAdmin为false,表单的提交动作为'viewUser'。
JSF标签⼤全详解1. JSF⼊门藉由以下的⼏个主题,可以⼤致了解JSF的轮廓与特性,我们来看看⽹页设计⼈员与应⽤程序设计⼈员各负责什么。
1.1简介JSFWeb应⽤程序的开发与传统的单机程序开发在本质上存在着太多的差异,Web应⽤程序开发⼈员⾄今不可避免的必须处理 HTTP的细节,⽽HTTP⽆状态的(stateless)本质,与传统应⽤程序必须维持程序运⾏过程中的信息有明显的违背,再则Web应⽤程序⾯对⽹站上不同的使⽤者同时的存取,其执⾏绪安全问题以及资料验证、转换处理等问题,⼜是复杂且难以解决的。
另⼀⽅⾯,本质上是静态的HTML与本质上是动态的应⽤程序⼜是⼀项违背,这造成不可避免的,处理⽹页设计的美术⼈员与程序设计⼈员,必须被彼此加⼊⾄视图组件中的逻辑互相⼲扰,即便⼀些视图呈现逻辑以卷标的⽅式呈现,试图展现对⽹页设计美术⼈员的亲切,但它终究必须牵涉到相关的流程逻辑。
有很多⽅案试着解决种种的困境,⽽各⾃的着眼点各不相同,有的从程序设计⼈员的⾓度来解决,有的从⽹页设计⼈员的⾓度来解决,各种的框架被提出,所造成的是各种不统⼀的标签与框架,为了促进产能的整合开发环境(IDE)难以整合这些标签与框架,另⼀⽅⾯,开发⼈员的学习负担也不断的加重,他们必须⼀⼈了解多个⾓⾊的⼯作。
Java Server Faces的提出在试图解决这个问题,它试图在不同的⾓度上提供⽹页设计⼈员、应⽤程序设计⼈员、组件开发⼈员解决⽅案,让不同技术的⼈员可以彼此合作⼜不互相⼲扰,它综合了各家⼚商现有的技术特点,由Java Community Process(JCP)团队研拟出来的⼀套标准,并在2004年三⽉发表了Java ServerFaces 1.0实作成果。
从⽹页设计⼈员的⾓度来看,Java Server Faces提供了⼀套像是新版本的HTML标签,但它不是静态的,⽽是动态的,可以与后端的动态程序结合,但⽹页设计⼈员不需要理会后端的动态部份,⽹页设计⼈员甚⾄不太需要接触JSTL这类的卷标,也可以动态的展现数据(像是动态的查询表格内容),Java Server Faces提供标准的标签,这可以与⽹页编辑程序结合在⼀起,另⼀⽅⾯,Java Server Faces也允许您⾃订标签。
JavaServerFacesJSF框架详细介绍JavaServer Faces(JSF)框架详细介绍JavaServer Faces(JSF)是一种用于构建Web用户界面的Java EE 框架。
它提供了一组组件、工具和API,用于简化Web应用程序的开发过程。
本文将详细介绍JSF框架的特点、组成部分以及如何使用JSF 构建Web应用程序。
一、JSF的特点JSF具有以下几个特点,使得开发人员能够更加高效地构建可靠的Web应用程序:1. 组件化:JSF采用组件化的开发模式,它提供了丰富的可重用组件,如按钮、文本框、下拉列表等,开发人员可以通过组合和定制这些组件来构建Web界面。
2. 事件驱动:JSF基于事件驱动的模型,开发人员可以通过监听和处理事件来实现页面之间的交互和数据传递。
3. 易于扩展:JSF提供了可扩展性和灵活性,开发人员可以通过编写自定义组件或扩展JSF的现有组件来满足特定需求。
4. 内容管理:JSF的面向组件的开发模式使得管理和维护页面内容变得更加容易,开发人员可以集中精力于业务逻辑的实现。
二、JSF的组成部分JSF框架由以下几个核心部分组成:1. JSF API:提供了开发Web应用程序所需的一系列Java类和接口,包括组件、事件、验证、数据绑定等。
2. JSF实现:包括了JSF API的具体实现,如Oracle的Mojarra和Apache的MyFaces等。
3. 组件库:JSF框架提供了一些内置的组件库,如PrimeFaces、RichFaces等,开发人员可以通过使用这些组件库来快速构建Web用户界面。
4. 配置文件:JSF框架使用配置文件来管理组件、事件处理、验证规则等,开发人员可以通过配置文件来定义和定制应用程序的行为。
三、如何使用JSF构建Web应用程序使用JSF构建Web应用程序涉及以下几个基本步骤:1. 定义页面:使用JSF提供的标签和组件来构建Web页面,包括按钮、表格、表单等。
JSF简介JSF 简要介绍也许你之前使⽤过Struts,SpringMVC,甚⾄于直接采⽤JSP+Servelet开发过web层。
JSF与这些最⼤的不同是JSF是基于⼀种以组件为中⼼的⽤户界⾯(UI)构建⽅法,从⽽简化了Java服务器端应⽤程序的开发。
开发⼈员把精⼒能更集中在实现业务上。
1,JSF(Java Server Faces)的本质也是Servlet,只不过实现Servlet的⽅式不同⽽已。
1.1,JSF与经典的Servlet请求处理的流程不同。
Servlet的请求处理是由界⾯的submit提交按钮将界⾯表单提交给后台,服务器通过request,session等对象获取表单数据,最后通过response对象将结果返回给界⾯。
Servlet请求处理流程,是需要我们程序员去关注去实现的。
⽽JSF请求过程中不需要通过request等变量获取值,它将浏览器端的页⾯变量与服务端的java对象对应起来了,依靠事件驱动完成请求。
程序员使⽤JSF再也不⽤关⼼如何在给后台传值如何在界⾯取值了。
直接在界⾯中使⽤由数据的ManagedBean就⾏了。
1.2,Servlet接⼝实现⽅式不同。
JSF的核⼼类javax.faces.webapp.FacesServlet,直接实现Servlet接⼝,该类定义为final类型,不希望开发⼈员去扩展实现,其已提供完整的对请求处理的解决⽅案。
httpServlet是abstract的,⽬的是让⼦类去实现,因此其他框架是对Servlet类的扩展实现。
1.3,核⼼⽅法也不同。
HttpServlet根据request.getMethod的请求类型区分,是doPost还是doGet。
facesServlet会交由⽣命周期接⼝处理,由⼀下六个阶段。
1:恢复视图阶段负责创建或者恢复视图,视图指UIViewRoot对象,是UIComponent对象的⼦类,视图组件是请求对应页⾯的组件树的根(⾯向组件架构)2:接受请求值阶段将页⾯元素对应组件树上的组件值。
前一章演示的简单JavaServer Faces应用程序示例,介绍了JSF的许多实用方面。
但是,在进入更高级JSF开发时,有一个JSF的关键部分非常重要:请求处理生命周期。
请求处理生命周期担当着使JavaServer Faces运行起来的“幕后”引擎的角色。
本章研究JavaServer Faces请求处理生命周期背后的关键概念,并解释如何用定义良好的基于事件的方式处理Web请求。
对请求处理生命周期的全面理解非常重要,因为在后续章节介绍高级JSF开发主题时,会多次提到请求处理生命周期的不同阶段。
3.1 JSF请求处理生命周期的高度概述从历史上看,Web应用程序必需的大部分开发,主要是处理Web客户端的HT TP请求。
随着Web从传统的静态文档传送模型(在这种模型中,只请求静态We b页面,没有参数)转变到动态环境(要求Web应用程序处理大量进入参数),对日益复杂的请求的处理需求,不可避免地增长起来。
这使Web应用程序开发变得相当烦琐。
例如,请看下面在Java servlet或JSP小程序中处理进入请求参数firstname和lastname的代码:String firstname = request.getParameter("firstname");String lastname = request.getParameter("lastname");// Do something with firstname and lastname考虑到现在多数高级Web应用程序即使不处理几千个,也要处理上百个参数,就可以看出上面这种参数处理方法很容易就会变得很烦琐。
有经验的Web开发人员都知道,编写处理进入请求参数的代码通常包含以下步骤:●编写对进入数据执行验证并把进入数据转换成服务器端数据类型的代码,并在验证/转换失败时初始化错误消息。
●编写用新数据更新服务器端数据的代码。
el的语法格式
EL(Expression Language)是一种基于Java语言的表达式语言,用于简化JSP(JavaServer Pages)页面中的表达式编写。
EL和JSP
标签相比,更加简单易懂,也更加灵活,可以使用在JSTL、JSF、
Struts等技术中,让开发者可以更加快速地开发出高效、易用的应用
程序。
EL语法格式非常简单,主要由${}的表达式组成,其中${}中可以
包含变量、属性、方法等内容,通过EL表达式来访问和操作这些内容。
例如:${}表示访问变量user对象的名称属性,
${user.getAddress()}表示访问变量user对象的getAddress()方法返回的值。
EL可以用于访问JSP页面中的各种元素,如请求参数、请求属性、session会话、应用程序属性等等,可以通过${param.xxx}、${requestScope.xxx}、${sessionScope.xxx}、${applicationScope.xxx}等方式来访问。
除此之外,EL还可以进行数值运算、逻辑判断、正则表达式匹配等等操作,让开发者可以更加方
便地进行相关的处理。
使用EL可以使JSP页面代码变得更加简洁、易维护,也能够提高
应用程序的可扩展性和重用性。
另外,EL的语法格式也不难掌握,开
发者可以通过学习一些EL的基础知识和常用表达式,快速上手EL的
应用。
总之,EL是一种非常有用的表达式语言,它可以帮助开发者更加高效地开发出优秀的应用程序。
学习EL的语法格式和应用技巧,不仅可以提高自己的开发能力,还能够让自己更加深入地理解JSP等相关技术的运行机制,为自己的技术之路带来更多的机遇。
第1章JSF ELJavaServer Faces 提供了一种在 Web 应用程序页面中使用的表达式语言 (JSF EL),用来访问位于页面 Bean 以及其他与 Web 应用程序关联的 Bean(如会话Bean 和应用程序 Bean)中的 JavaBeans 组件。
在大多数情况下,IDE 都会为您指定正确的表达式,例如,当您将组件的 text 属性绑定到数据提供器或JavaBean 属性时。
JavaServer Faces 表达式语言语法使用分隔符 #{},如以下内容所述。
JavaServer Faces 表达式既可以是值绑定表达式(用于将 UI 组件或其值绑定到外部数据源中),也可以是方法绑定表达式(用于引用支持 Bean 方法)。
该表达式还可以接受混合的类型和计算语法,以及 2.0 表达式语言的运算符。
第2章 JavaServer Faces EL 表达式语法JSF EL 可用于将 JavaBeans 绑定到组件属性,以简化组件从各种源访问数据的方式。
JSF EL 表达式使用语法 #{expr};值绑定表达式的语法与 JavaServer Pages 规范(版本 2.0)2.3 节至 2.9 节中定义的表达式语言表达式的语法类似,但是具有以下不同之处:∙值绑定表达式的表达式分隔符是 #{ 和 },而不是${ 和 }。
∙值绑定表达式不支持 JSP 表达式语言函数。
除了在分隔符方面存在区别外,这两种表达式类型在以下语义方面也有所不同:∙在呈现期间,值绑定表达式由 JavaServer Faces 实现(通过调用getValue 方法)进行计算,而不是由页面的编译代码进行计算。
∙即使没有出现页面,也可以采用编程方式计算值绑定表达式。
∙值绑定表达式计算通过当前 Web 应用程序的 Application 对象,利用已配置的 VariableResolver 和 PropertyResolver 对象的可用功能,应用程序可为其提供能够带来额外功能的插件替换类。
第1章JSF ELJavaServer Faces 提供了一种在 Web 应用程序页面中使用的表达式语言 (JSF EL),用来访问位于页面 Bean 以及其他与 Web 应用程序关联的 Bean(如会话Bean 和应用程序 Bean)中的 JavaBeans 组件。
在大多数情况下,IDE 都会为您指定正确的表达式,例如,当您将组件的 text 属性绑定到数据提供器或JavaBean 属性时。
JavaServer Faces 表达式语言语法使用分隔符 #{},如以下内容所述。
JavaServer Faces 表达式既可以是值绑定表达式(用于将 UI 组件或其值绑定到外部数据源中),也可以是方法绑定表达式(用于引用支持 Bean 方法)。
该表达式还可以接受混合的类型和计算语法,以及 2.0 表达式语言的运算符。
第2章 JavaServer Faces EL 表达式语法JSF EL 可用于将 JavaBeans 绑定到组件属性,以简化组件从各种源访问数据的方式。
JSF EL 表达式使用语法 #{expr};值绑定表达式的语法与 JavaServer Pages 规范(版本 2.0)2.3 节至 2.9 节中定义的表达式语言表达式的语法类似,但是具有以下不同之处:∙值绑定表达式的表达式分隔符是 #{ 和 },而不是${ 和 }。
∙值绑定表达式不支持 JSP 表达式语言函数。
除了在分隔符方面存在区别外,这两种表达式类型在以下语义方面也有所不同:∙在呈现期间,值绑定表达式由 JavaServer Faces 实现(通过调用getValue 方法)进行计算,而不是由页面的编译代码进行计算。
∙即使没有出现页面,也可以采用编程方式计算值绑定表达式。
∙值绑定表达式计算通过当前 Web 应用程序的 Application 对象,利用已配置的 VariableResolver 和 PropertyResolver 对象的可用功能,应用程序可为其提供能够带来额外功能的插件替换类。
∙如果值绑定表达式用于 EditableValueHolder 组件(任何输入字段组件)的值属性,则该表达式可用于修改引用的值,而不是在请求处理生命周期的“更新模型值”阶段对其进行检索。
有效的值绑定表达式示例包含:#{}#{Foo.bar}#{Foo[bar]}#{Foo[“bar”]}#{Foo[3]}#{Foo[3].bar}#{Foo.bar[3]}#{Customer.status == ‘VIP’}#{(Page1.City.farenheitTemp - 32) * 5 / 9}Reporting Period: #{Report.fromDate} to #{Report.toDate}对于要调用 setValue 方法的值绑定表达式(例如,在更新模型值期间输入字段的 text 属性绑定),其语法被限于使用以下任一格式,其中 expr-a 是用于计算某个对象的常规表达式,value-b 是一个标识符:#{expr-a.value-b}#{expr-a[value-b]]#{value-b}第3章获取值语义当调用 ValueBinding 实例的 getValue 方法(例如,在页面呈现期间计算 JSP 标记属性上的表达式),并计算该表示式时,将返回计算的结果,计算方法如下:∙该表达式语言统一了对 . 和 [] 运算符的处理方式。
expr-a.expr-b 等同于 a["expr-b"];即表达式 expr-b 用于构造其值为标识符的类型,然后 [] 运算符将与该值一起使用。
∙由 VariableResolver 实例计算表达式中最左侧的标识符,该实例是从此Web 应用程序的 Application 实例中获得的。
如果位于 . 或 [] 运算符左侧的值是 RowSet,则右侧的对象将被视为列名称。
有关这些运算符的完整计算说明,请参见下一节。
∙由 PropertyResolver 实例计算表达式中 . 或 [...] 运算符的每个实例,PropertyResolver 是从此 Web 应用程序的 Application 实例中获得的。
∙使用 . 运算符来访问变量的属性,然后可以随意进行嵌套。
第4章设置值语义在调用 ValueBinding 的 setValue 方法时(例如,在更新模型值期间输入字段的 text 属性绑定),值绑定语法的限制如上一部分中所述。
实现必须执行以下处理才能计算 #{expra.value-b} 或 #{expr-a[value-b]} 格式的表达式:∙将 expr-a 计算为 value-a。
∙如果 value-a 为空,则抛出 PropertyNotFoundException。
∙如果 value-b 为空,则抛出 PropertyNotFoundException。
∙如果 value-a 为映射,则调用 value-a.put(value-b, new-value)。
∙如果 value-a 是 List 或数组:o将 value-b 强制为 int,从而在出现错误时抛出ReferenceSyntaxException。
o在适当的时候尝试执行 value-a.set(value-b, new-value) 或Array.set(value-b, new-value)。
o如果 IndexOutOfBoundsException 或ArrayIndexOutOfBoundsException 已被抛出,则还会抛出PropertyNotFoundException。
o如果已出现其他异常,则会抛出 EvaluationException。
∙否则执行以下操作(value-a 是 JavaBeans 对象):o将 value-b 强制为 String。
o如果 value-b 是 value-a 的可编写属性(按照每个 JavaBeans 规范),则调用 setter 方法(传递 new-value)。
如果出现异常,则抛出 ReferenceSyntaxException。
o否则,将抛出 PropertyNotFoundException。
如果整个表达式包括一个标识符,则会应用以下规则:∙如果标识符与以下描述的任一隐式对象的名称相匹配,则抛出 ReferenceSyntaxException。
∙否则,如果标识符与请求范围、会话范围或应用程序范围中属性的关键字相匹配,则相应的属性值将被new-value替换。
∙否则,将创建新的请求范围属性,其关键字是标识符,而其值是 new-value。
第5章隐式对象表达式语言定义一组隐式对象:∙facesContext - 当前请求的 FacesContext 实例。
∙param - 将请求参数名称映射到单个值中。
∙paramValues - 将请求参数名称映射到值的数组中。
∙header - 将请求标题名称映射到单个值中。
∙headerValues - 将请求标题名称映射到值的数组中。
∙cookie - 将 cookie 名称映射到单个 cookie 中。
∙initParam - 将上下文初始化参数名称映射到单个值中。
允许访问各种范围的变量的对象:∙requestScope - 将请求范围的变量名称映射到它们的值中。
∙sessionScope - 将会话范围的变量名称映射到它们的值中。
∙applicationScope - 将应用程序范围的变量名称映射到它们的值中。
当表达式按名称引用其中一个对象时,将返回相应的对象。
隐式对象比同名属性的优先级要高。
例如,即使现有 facesContext 属性包含一些其他值,#{facesContext} 也将返回 FacesContext 对象。
第6章类型表达式语言定义了以下类型:∙布尔型:true 和 false∙整型:与 Java 中一样∙浮点型:与 Java 中一样∙字符串型:使用单引号和双引号;" 转义为 \", ' 转义为 \',而 \ 转义为 \\。
∙空:null第7章运算符除了在上述获取值语义和之后的章节中讨论的 . 和 [] 运算符外,表达式语言还提供以下运算符:∙算术运算符:+、-(二元)、*、/、div、%、mod、-(一元)∙逻辑运算符:and、&&、or、||、not、!∙关系运算符:==、eq、!=、ne、<、lt、>、gt、<=、ge、>=、le。
可以与其他值、或布尔型、字符串型、整型或浮点型相比较。
∙空运算符:empty 运算符是可以用来确定值是否为 null 或空的前缀运算。
∙条件运算符:A ?B : C。
计算 B 或 C,具体情况取决于 A 的计算结果。
按从高到低,从左到右的顺序排列的运算符优先级如下所示:∙[] .∙() (更改运算符的优先级)∙-(一元) not ! empty∙* / div % mod∙+ -(二元)∙< > <= >= lt gt le ge∙== != eq ne∙&& and∙|| or∙? :第8章保留字以下单词是为表达式语言而保留的,不能用作标识符:and false le notdiv ge lt Nullempty gt mod oreq instanceof ne true1.from Sun/docs/jscreator/help/2update1/jsp-jsfel/jsf_ expression_language_intro.html2. from Java Enterprise in a NutShell/read/others/0512/OReilly.Java.Enterprise.in.a. Nutshell.3rd.Edition.Nov.2005_html/0596101422/javaentnut3-CHP-5-SECT-4.html。