1、Java基础知识之基础知识之Java Web开开发基础培训发基础培训一、Web开发技术二、JSF框架三、SEAM框架四、EpointJWeb框架一、Web开发技术w Web架构n用超文本技术(HTML)实现信息与信息的连接;n用统一资源定位技术(URI)实现全球信息的精确定位;n用新的应用层协议(HTTP)实现分布式的信息共享。 w 静态 动态w 客户端技术nHTML、Java Applets、JavaScript、ActiveX、CSS、DHTML、XHTMLw 服务端技术nCGI(Common Gateway Interface) lC、C+、Pascal lPerl、PythonnPHP
2、、ASP、Servlet(JSP)+ JavaBean二、JSF框架w JSF简介w JSF入门w JSF标签w JSF开发环境JSF简介w 什么是JSFw JSF的特性w JSF与其它框架的比较w JSF实现w JSF示例什么是JSFw JavaServer Faces (JSF) :符合JavaEE5标准的Java Web应用框架。目标:简化开发。 w JSF提供:n标准的编程接口n丰富可扩展的组件库l一个核心的JSP标记库用来处理事件、执行验证以及其他非UI相关的操作(core)l一个标准的HTML标记库来表示UI组件(html)n事件驱动模型w JSF通过IDE工具支持拖放式开发。 J
3、SF的由来和目标w 由来nEJB2的失败n非官方Web框架的兴起w 目标n简化开发n超越现有Web框架n试图在不同的角度上提供网页设计人员、应用程序设计人员、组件开发人员解决方案,让不同技术的人员可以彼此合作又不互相干扰JSF 体系结构 w JSF 的主要优势之一就是它既是 Java Web 用户界面标准又是严格遵循模型-视图控制器 (MVC) 设计模式的框架。用户界面代码(视图视图)与应用程序数据和逻辑(模型模型)的清晰分离使 JSF 应用程序更易于管理。为了准备提供页面对应用程序数据访问的 JSF 上下文和防止对页面未授权或不正确的访问,所有与应用程序的用户交互均由一个前端“Faces”s
4、ervlet(控制器控制器)来处理。 JSF的特性w 技术特性 n一流的UI组件和事件模型nPOJO依赖注入(又称控制反转) n客户端独立性 n使用或者不使用工具 n可扩展的导航(类似于Struts导航,注:Page导航) n强大的扩展能力 (如Shale) n完全的集成(如集成Spring、JPA) n本地化和易理解性JSF的特性w 市场和商业特性 n广泛的采用,包括SUN,Oracle,IBM,BEA,Apache,EDS n作为JavaEE 5.0的组成部分 n大型第三方组件市场(iLog, Business Objects, Oracle, Sun, IBM) n业内领先的工具支持(S
5、un Java Studio Creator, NetBeans,Oracle JDeveloper, IBM WSAD, BEA Workshop, Exadel Studio) 与其它框架的比较(来自TSS)技术特性商业使用JSF4.83.9WebWork4.23.1Shale4.951.3Tapestry4.752.8Wicket0.7Struts4.24.6JSF的优势w UI组件(UI-component) w 事件驱动模式w 用户界面到业务逻辑的直接映射 w 程序员和网页设计人员的分工 w 请求处理生命周期的多阶段划分 w 全面的用户自定义支持 w Web开发的官方标准之一w 大量
6、的IDE工具支持JSF实现w JSF是标准w 实现nSun JSF RInApache MyFacesw 组件库nTomahawknADF Faces (from Oracle)nTobago JSF示例 第一个JSF程序 请输入您的名称 名称: JSF入门w 第一个JSF程序w JSF Expression Language w 国际化(I18N)w Managed Beansw 数据转换与验证w 事件处理第一个JSF程序w JSF开发环境nEclipse WTPnJSF插件nJSF实现(MyFaces)nTomcatw Managed-Beanw JSP页面w Pages Navigati
7、onJSF Expression Language w 搭配 JSF 标签来使用,是用来存取数据对象的一个简易语言。 w 以#开始,将变量或运算式放置在 与 之间。n#userBean.namew EL的变量名也可以程序执行过程中所声明的名称,或是JSF EL预定义的隐含对象。n#param.namew 对于Map类型对象,可以使用 . 运算符指定key值来取出对应的value,也可以使用 与 来指定。n#paramname n#someBean.someMapuser.name w 如果变量是List类型或阵列的话,则可以在 中指定索引。n#someBean.someList0 JSF Ex
8、pression Languagew也可以指定字面常数,对于true、false、字符串、数字,JSF EL会尝试进行转换。n n w在声明变量名称时,要留意不可与JSF的保留字或关键字同名。ntrue false null div mod and or not eq ne lt gt le ge instanceof empty w在EL中可以直接进行一些算术运算、逻辑运算与关系运算。n算术运算符:加法 (+), 减法 (-), 乘法 (*), 除法 (/ or div) 与余除 (% or mod) n三元运算:( expression ? result1 : result2)n逻辑运算:
9、and(或&)、or(或!)、not(或!) n关系运算:小于Less-than ( or gt)、小于或等于Less-than-or-equal (= or ge)、等于Equal (= or eq)、不等于Not Equal (!= or ne) nEL运算符的执行优先顺序与Java运算符对应 国际化信息w JSF的国际化(Internationalization,简写I18N)信息处理是基于Java对国际化的支持,可以在一个信息资源文件中统一管理信息资源,资源文件的名称是.properties,而内容是名称与值的配对。w 资源文件名称由basename加上语言与地区来组成:basenam
10、e.properties basename_en.properties basename_zh_CN.propertiesw 信息资源文件必须是ISO-8859-1编码,所以对于非西方语系的处理,必须先将之转换为Java Unicode Escape格式:nameText=名称 nameText=u540du79f0 w 使用标签来指定载入信息资源: 国际化信息w可以设定locale属性,直接指定所要使用的语系: w也可以在faces-config.xml中设定语系: zh_CN en . w甚至可以让使用者选择自己的语系: Managed Beans w JSF 使用 Bean 来达到逻辑层
11、与表现层分离的目的,Bean 的管理集中在配置文件中,只要修改配置文件,就可以修改 Bean 之间的相依关系。 w Backing Bean,Glue Bean:在真正的业务逻辑Bean及UI组件之间搭起桥梁,在Backing Bean中会呼叫业务逻辑Bean处理使用者的请求,或者是将业务处理结果放置其中,等待UI组件取出当中的值并显示结果给使用者。 Managed Beansw 在faces-config.xml中集中管理w 作用域:napplication :一直存活nsession :会话过程nrequest :请求阶段nnone :需要时,临时Beans的配置与设定 w JSF预定义会
12、读取faces-config.xml中关于Bean的定义 w 可在web.xml中利用javax.faces. CONFIG_FILES参数指定自定义文件: javax.faces.CONFIG_FILES /WEB-INF/beans.xml . w 定义文件可以有多个,中间以 “,” 区隔:/WEB-INF/navigation.xml,/WEB-INF/beans.xml Beans的配置与设定w Bean的基本定义:n名称 n类 n存活范围 w 可选设置n属性的初始值 user #user Beans上的List someProperty java.lang.Integer 1 2 3
13、 Beans上的Map someProperty java.lang.Integer someKey1 100 someKey2 200 访问Managed Beansw 如果要在其它类中取得Bean对象,则可以先取得javax.faces.context.FacesContext,它代表了JSF目前的执行环境对象,接着尝试取得javax.faces.el.ValueBinding对象,从中取得指定的Bean对象:FacesContext context = FacesContext.getCurrentInstance(); ValueBinding binding = context.ge
14、tApplication(). createValueBinding(#user); UserBean user = (UserBean) binding.getValue(context); w 取得Bean的某个属性:FacesContext context = FacesContext.getCurrentInstance(); ValueBinding binding = context.getApplication(). createValueBinding(#user.name); String name = (String) binding.getValue(context);
15、Jsf的页面跳转w简单跳转w跳转的配置:ww /test_inter.jspw w outw w /test_out.jspw w wJsf页面的实现:w Jsf的页面跳转w复杂跳转,通过方法实现w跳转的配置:w/test_inter.jspw w sucessw/success.jspw w errorw/error.jspw w Jsf的页面跳转w复杂跳转,通过方法实现wJsf页面的实现:ww方法实现:wpublic String action()/复杂逻辑String result = “error”;try result = “success”;catch(Exception ex)
16、result = “error”;return result;w数据转换与验证 w 转换器(Converter)协助模型与视图之间的数据转换w 验证器(Validator)协助进行语意检验(Semantic Validation)标准转换器w HTTP字符串 Java对象w 对于基本数据类型(primitive type)或是其Wrapper类,JSF会使用javax.faces.Boolean、javax.faces.Byte等自动进行转换w 对于 BigDecimal、BigInteger,则会使用javax. faces.BigDecimal、javax.faces.BigInteger
17、自动进行转换w 对于DateTime、Number,可以使用、标签进行转换,它们各自提供有一些简单的属性,可以让我们在转换时指定一些转换的格式细节: 自定义转换器 w 实现javax.faces.convert.Converter接口,这个接口有两个要实现的方法:public Object getAsObject(FacesContext context, UIComponent component, String str); public String getAsString(FacesContext context, UIComponent component, Object obj);
18、w 在faces-config.xml中注册: cn.wiztek.converter.User cn.wiztek.converter.UserConverter w 在JSF页面中通过converter-id使用转换器: 标准验证器 w 语法检验(Synatic Validation) n检查使用者输入的数据是否合乎我们所要求的格式,最基本的就是检查使用者是否填入了栏目值,或是栏目值的长度、大小值等等是否符合要求。w 三种标准验证器:nnn 自定义验证器 w 实现javax.faces.validator.Validator接口中的validate()方法,如果验证错误,则丢出一个Vali
19、datorException,它接受一个FacesMessage对象,这个对象接受三个参数,分别表示信息的严重程度(INFO、 WARN、ERROR、FATAL)、信息概述与详细信息内容,这些信息将可以使用或标签显示在页面上。 w 在faces-config.xml中注册验证器的标识(Validater ID)。w 通过标签并设定validatorId属性来使用自定义验证器。 自定义验证器w配置文件加上验证器:n ncom.jinyang.validator.password ncom.jinyang.validator.PasswordValidator n wJsf页面使用验证器n n n
20、n自定义验证器w 验证器代码:npackage com.jinyang.validator;nimport javax.faces.application.FacesMessage;nimport ponent.UIComponent;nimport javax.faces.context.FacesContext;nimport javax.faces.validator.Validator;nimport javax.faces.validator.ValidatorException;npublic class PasswordValidator implements Validator
21、npublic void validate(FacesContext context, UIComponent component, Object obj)nthrows ValidatorException n/obj=验证器组件关联的jsf输入组件的值nString password = (String) obj;nif (password.length() 6) nFacesMessage message = new FacesMessage(nFacesMessage.SEVERITY_ERROR, 字符长度小于6, 字符长度不得小于6);nthrow new ValidatorExc
22、eption(message);nnif (!password.matches(.+0-9+) nFacesMessage message = new FacesMessage(nFacesMessage.SEVERITY_ERROR, 密码必须包括字符与数字, 密码必须是字符加数字所组成);nthrow new ValidatorException(message);nnn错误信息处理 w 预定义的错误信息可以使用或标签显示出来w 通过提供一个信息资源文件可以修改预定义的错误信息w MyFaces提供了支持中文的错误信息文件Messages_zh_CN.properties w 也可以在程序
23、中使用FacesMessage来提供信息 自定义转换/验证标签 w 使用标签来设定属性: w 在自定义验证器中用下面语句获取属性:String pattern = (String) component.getAttributes().get(pattern);w 也可以开发自己的一组验证标签,并提供相关属性设定: 事件处理 w 动作事件(Action Event )w 即时事件(Immediate Event )w 值变事件(Value Change Event )w 阶段事件(Phase Event)动作事件(Action Event )w 通过action属性绑定一个事件方法: w 通过a
24、ctionListener属性绑定一个事件方法, action绑定返回结果的方法: w 用标签向组件注册事件监听器(实现javax.faces.event. ActionListener接口),action绑定返回结果的方法: 即时事件(Immediate Event ) 即时事件是指JSF视图组件在取得请求中该取得的值之后,即立即处理指定的事件,而不再进行后续的转换器处理、验证器处理、更新模型值等流程。 值变事件(Value Change Event )w使用者改变了JSF输入组件的值后提交表单,就会发生值变事件,丢出一个javax.faces.event.ValueChangeEvent对
25、象 w直接设定JSF输入组件的valueChangeListener属性: w实现javax.faces.event.ValueChangeListener接口,并定义其processValueChange()方法;然后在JSF页面上使用标签,并设定其type属性: 阶段事件(Phase Event)w重建视图(重建视图(Restore View) 依客户端传来的session数据或服务器端上的session数据,重建JSF视图组件。w套用请求值(套用请求值(Apply Request Values) JSF视图组件各自获得请求中的属于自己的值,包括旧的值与新的值。w执行验证(执行验证(Pro
26、cess Validations) 转换为对象并进行验证。w更新模型值(更新模型值(Update Model Values) 更新Bean或相关的模型值。w唤起应用程序(唤起应用程序(Invoke Application) 执行应用程序相关逻辑。w绘制响应页面(绘制响应页面(Render Response) 对先前的请求处理完之后,产生页面以反应客户端执行结果。阶段事件(Phase Event)w 在每个阶段的前后会引发javax.faces.event. PhaseEventw 实现javax.faces.event.PhaseListener,并向javax.faces.lifecycle
27、.Lifecycle登记这个Listener,便可捕获事件w getPhaseId()、beforePhase()与afterPhase() w PhaseId:nPhaseId.RESTORE_VIEWnPhaseId.APPLY_REQUEST_VALUESnPhaseId.PROCESS_VALIDATIONSnPhaseId.UPDATE_MODEL_VALUESnPhaseId.INVOKE_APPLICATIONnPhaseId.RENDER_RESPONSE nPhaseId.ANY_PHASE JSF标签w 标准标签n输出类标签n输入类标签n命令类标签n选择类标签n其他标签w
28、表格处理JSF标准标签w 输出(输出(Outputs) 其名称以output作为开头,作用为输出指定的信息或绑定值。w 输入(输入(Inputs) 其名称以input作为开头,其作用为提供使用者输入框。w 命令(命令(Commands) 其名称以command作为开头,其作用为提供命令或链接按钮。w 选择(选择(Selections) 其名称以select作为开头,其作用为提供使用者选项的选取。w 其它其它 包括了form、message、messages、graphicImage等等未分类的标签。 标准HTML标签的属性属性名称属性名称适用适用说明说明id所有组件可指定id名称,以让其它标签
29、或组件参考binding所有组件绑定至UIComponentrendered所有组件是否显示组件 styleClass所有组件设定Cascading stylesheet(CSS)value输入、输出、命令组件设定值或绑定至指定的值valueChangeListener输入组件设定值变事件处理者converter输入、输出组件设定转换器validator输入组件设定验证器 required输入组件是否验证必填输入框 immediate输入、命令组件是否为即时事件输出类标签woutputLabel产生 HTML标签,使用for属性指定组件的client ID,例如:woutputLink产生 H
30、TML标签,搭配可帮链结加上参数,所有的参数都会变成 name=value 的类型附加在链接后,value所指定的内容也可以是JSF EL绑定。例如: woutputFormat产生指定的文字信息,可以搭配来设定信息的参数以格式化文字信息,例如: woutputText简单的显示指定的值或绑定的信息,例如: 输入类标签winputText显示单行输入框,即输出 HTML标签,其type属性设定为text,例如: winputTextarea显示多行输入文字区域,即输出 HTML标签,例如: winputSecret显示密码输入框,即输出 HTML标签,其type属性设定为password,例如
31、: winputHidden隐藏输入框,即输出 HTML标签,其type属性设定为hidden,隐藏输入框的值用于保留一些信息于客户端,以在下一次发送表单时一并提交,例如: 命令类标签w commandButton显示一个命令按钮,即输出 HTML标签,其type属性可以设定为button、submit或reset,预设是submit,按下按钮会触发 javax.faces.event. ActionEvent,例如: w commandLink产生超链接,会输出 HTML标签,而href属性会有#,而onclick属性会含有一段JavaScript程序,这个JavaScript的目的是按下链
32、接后自动提交表单,具体来说其作用就像按钮,但外观却是超链接,例如: 选择类标签 w 选取框选取框nw 单选单选n单选按钮单选按钮n单选列表单选列表n单选菜单单选菜单w 复选复选n复选框复选框n复选列表复选列表n复选菜单复选菜单选择类标签的选项w nitemLabelnitemValue 或者value绑定一个传回javax.faces. model.SelectItem的方法 w nvalue绑定至一个提供传回SelectItem的列表(数组)的方法 SelectItem: value, labelnvalue绑定至一个提供传回Map对象的方法Map : label, value其他标签w 或
33、 w 图片w 排版n本体间只能包括JSF组件,如果想要放入非JSF组件,例如简单的样版(template)文字,则要使用 包括住。 w 包装组件表格处理w 配合实现以表格的方式显示数据 w header与footer分别表示表头和表尾w 使用DataModel处理复杂的数据Jsf上下文对象获取w Request变量获取:n如何取得名称为“data“的传入参数值nMap params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); String data = (String)pa
34、rams.get(data); Jsf上下文对象获取w session变量获取:n如何取得名称为“UserInfo“的对象值nUserInfo User = (UserInfo) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(“UserInfo”);System.out.println(User.UID);System.out.println(User.UPwd);Primefaces简介JavaServer Faces+AJAX=Primefaces Rich JSF Components
35、primefaces控件JSF控件的执行过程三、三、Seam(JSF与与JPA的桥梁的桥梁)w Seam简介w 上下文组件模型w 对象关系映射w 远程访问对象w 注解w EL表达式w JBoss-tools自动生成项目骨架wJBoss Seam是一个Java EE5框架。wSeam通过把JSF与EJB3.0组件合并在一起,从而为开发基于Web的企业应用程序提供一个最新的模式。wSeam可以让你把EJB组件直接绑定到JSF页面。wSeam能够统一和集成现有的开源技术集成如Facelets、Hibernate、jBPM、Drools、Groovy、Java Portlets、BPM、AJAX、iT
36、ext和Lucene。Seam简介上下文组件模型 Seam中的两个核心概念是 context(上下文)思想和 component(组件)思想。组件是具有状态的对象,通常是EJB,也可以是POJO对象,组件的实例会和上下文绑定,在此上下文中具有一个名字。上下文组件模型EntityName(user)Scope(SESSION)Table(name=Customer)public class User implements Serializable StatefulScope(EVENT)Name(changePassword)Restrict(#identity.loggedIn)public
37、class ChangePasswordAction implements ChangePassword In Out private User user; The “User” entity bean is in the “Session” scope.When ever a method on the ChangePassword bean is called, the “User” object from the session scope will be injected prior to the call.After every method call,any changes to
38、the User objectare “out-jected” back to theSession.Note: because names match, no mapping is necessary.对象关系映射w Java持久化架构nHibernatenJPAw Seam管理的事务 Seam为事务的开始,提交,回滚,同步提供了一个事务管理抽象w Seam管理的持久化上下文n在Seam管理的持久化上下文中使用JPAn使用Seam管理的Hibernate会话Seam注解一w 用于定义组件的注解 Name(componentName)为一个类定义一个Seam组件Scope(ScopeType.
39、CONVERSATION)定义默认的组件上下文BypassInterceptors 取消在特定组件或者一个组件方法上的所有拦截器。 Synchronized(timeout=1000)如果组件被多个客户端并发访问,Seam应该串行化请 求。如果一个请求在给定时间段内没有得到组件的锁,将抛出一个例外。 AutoCreate 声明组件将被自动建立,即使客户端不定义 create=truew用于双向注入的注解In(value=“contextVariableName”)在每次组件调用开始时,从上下文变量注入此组件属性Out(value=contextVariableName)在调用结束后注射出Sea
40、m组件属性到上下文变量w关于组件生命周期方法的注解关于组件生命周期方法的注解Create当组件实例被Seam初始化时,该方法应被调用Seam注解二w用于在用于在J2EE环境中使用环境中使用Seam JavaBean组件的注解组件的注解Transactional方法调用应该发生在一个事务中,如果当调用方法时没有事务存在,一个事务将特地为该方法启动w用于用于Seam Remoting 的注解的注解WebRemote(exclude=path.to.exclude)明被注解的方法可以被客户端JavaScript脚本调用。w用于用于Seam拦截器(拦截器(interceptor)的注解)的注解Inte
41、rceptor(stateless=true)指定这个拦截器是无状态的,Seam可以优化复制w用于异步(用于异步(asynchronicity)的注解)的注解Asynchronous public Timer scheduleAlerts(Alert alert, Expiration Date date, IntervalDuration long interval) . w用于用于JSF的注解的注解Converter允许一个Seam组件作为JSF转换器(JSF converter)。 Validator允许一个Seam组件作为JSF验证器(JSF Validator)。 w用于和用于和Se
42、rvlet容器集成的注解容器集成的注解Filter(around=seamComponent, otherSeamComponent)使一个用 Filter 注解的Seam组件(它实现了 javax.servlet.Filter 接口)作为一个Servlet 过滤器(Filter)使用。它将会被Seam的主Filter执行EL表达式一JSF的表达式语言(EL)的形式跟jSP的表达式语言的形式类似:#.。EL的主要用途是使你可以引用和更新bean的属性,或者执行简单的语句,而不用写完整的Java代码。wJSF EL基于JSP 2.0中的表达式语言,它的用法几乎跟JSP2.0中的表达式语言一样,但
43、二者仍有一些关键不同:wJSF使用(#)来标记表达式的开始,而JSP使用($);wJSF表达式是双向的。即它可以引用属性的值也可以更新之;wJSF EL也允许引用对象方法;w某些JSP特定的特征无效,比如页面上下文范围(page);w JSF EL表达式可以通过常规Java代码求解(结果是可以不需要JSP);wJSF EL不官方支持函数。wJSF EL也支持“.”和“”取值。它支持全范围的算术运算、逻辑运算与关系运算wJSF EL支持的隐含变量有:cookie、header、headerValues、initParam、param、paramValues、applicationScope、se
44、ssionScope、requestScope、还有facesContext(当前请求的FacesContext实例)和view(当前视图)。如:var loginid = #facesContext.externalContext.requestParameterMap.get(loginid);EL表达式二 Seam提供了一个可扩展标准统一表达语言(EL)被称为JBoss EL。JBoss EL提供了许多增强表达和更强的EL语言方面的加强w 参数方法绑定参数方法绑定w 参数值绑定参数值绑定#person.name.length()、#searchResults.size()w 映射映射#c
45、ompany.departments.d|d.name四、四、EpointJWeb框架框架w 框架平台架构w 基于框架的编程方案n工程组织方式n界面规范(菜单、模板页)n独立组件包n编码步骤n用户注册案例实战框架平台架构基于框架的重用是系统开发的主流方向,可以提高系统质量及开发效率,主要包含以下通用平台组件。w 组织架构管理平台w 权限配置管理平台w 工作流管理平台w 数据管理平台w 消息管理平台基于框架的编程方案w 创建web工程w 导入框架包w 新增功能包n*.Bizlogic.jarn*.Action.jarn页面文件(模板)nSeam组件与页面空间的绑定w 菜单挂载工程组织方式w WA
46、R方式w 独立的业务逻辑w 独立的控制逻辑w 独立的页面展现n新增页面n编辑页面n列表页面界面规范之一:界面布局w 登录界面w 首页面w 左侧菜单w 顶部菜单w 快捷菜单w 中间区域界面规范之二:页面模板Facelets模板涉及到3类文件:w模板文件模板文件是具有视图文件中相同界面元素部分,并在其中定义了可插入的编辑区域来加入不相同的部分,使用“默认内容”来定义编辑区域w视图文件(页面文件)视图文件是我们具体要实现的页面,也就是在地址栏引用的页面,在该文件中使用标签来定义该页面使用的模板(的template属性来定义),以及在模板中各个插入区域要显示的内容(在内容区域使用来定义),标签对中的内
47、容可以使用普通标签,也可以使用来包含第三类文件(内容文件)w内容文件内容文件是普通的含有HTML或其他标签的文件,它将被视图文件中的来独立组件包w 考虑新开发功能的整体重用可能?YES/NOw 考虑业务逻辑的重用性?-YESw 考虑页面控制逻辑的重用性?-NOw 考虑页面与控制逻辑的分离?-YES=*.Bizlogic.jar + *.Action.jar+页面页面编码步骤w 业务数据实体生成可以通过Mis平台在数据库中新建表或者手动在数据库中创建数据表。w 业务逻辑层编写w 业务控制层编写w 页面展现层编写根据页面的展示要求,选择合适的页面模板,选取相应的控件进行页面的绘制。w 控件与seam组件的绑定 展现层与后台逻辑的交互通过action层的seam组件来完成,将对应的seam组件绑定到控件的value属性或控件的事件方法上。谢谢!