
Struts和JSF/Tapestry都属于表现层框架 这两种分属不同性质的框架 后者是一种事件驱动型的组件模型 而Struts只是单纯的MVC模式框架 老外总是急吼吼说事件驱动型就比MVC模式框架好 何以见得 我们下面进行详细分析比较一下到底是怎么回事?首先事件是指从客户端页面(浏览器)由用户 *** 作触发的事件 Struts使用Action来接受浏览器表单提交的事件 这里使用了Command模式 每个继承Action的子类都必须实现一个方法execute 在Struts中 实际是一个表单Form对应一个Action类(或DispatchAction) 换一句话说 在Struts中实际是一个表单只能对应一个事件 Struts这种事件方式称为application event application event和Component event相比是一种粗粒度的事件 Struts重要的表单对象ActionForm是一种对象 它代表了一种应用 这个对象中至少包含几个字段 这些字段是Jsp页面表单中的input字段 因为一个表单对应一个事件 所以 当我们需要将事件粒度细化到表单中这些字段时 也就是说 一个字段对应一个事件时 单纯使用Struts就不太可能 当然通过结合JavaScript也是可以转弯实现的 而这种情况使用JSF就可以方便实现<h:inputText id= userId value= #{login userId} ><f:valueChangeListener type= logindemo UserLoginChanged /></h:inputText>#{login userId}表示从名为login的JavaBean的getUserId获得的结果 这个功能使用struts也可以实现 name= login property= userId 关键是第二行 这里表示如果userId的值改变并且确定提交后 将触发调用类UserLoginChanged的processValueChanged( )方法 JSF可以为组件提供两种事件 Value Changed和 Action 前者我们已经在上节见识过用处 后者就相当于struts中表单提交Action机制 它的JSF写法如下 <h:mandButton id= login mandName= login ><f:actionListener type= logindemo LoginActionListener /></h:mandButton>从代码可以看出 这两种事件是通过Listerner这样观察者模式贴在具体组件字段上的 而Struts此类事件是原始的一种表单提交Submit触发机制 如果说前者比较语言化(编程语言习惯做法类似Swing编程) 后者是属于WEB化 因为它是来自Html表单 如果你起步是从Perl/PHP开始 反而容易接受Struts这种风格 基本配置 Struts和JSF都是一种框架 JSF必须需要两种包JSF核心包 JSTL包(标签库) 此外 JSF还将使用到Apache项目的一些mons包 这些Apache包只要部署在你的服务器中既可 JSF包下载地址 选择其中Reference Implementation JSTL包下载在 /downloads_taglibs standard cgi所以 从JSF的驱动包组成看 其开源基因也占据很大的比重 JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿 上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了 与Struts的驱动包一样 这些驱动包必须位于Web项目的WEB INF/lib 和Struts一样的是也必须在web xml中有如下配置 <web app><servlet><servlet name>Faces Servlet</servlet name><servlet class>javax faces webapp FacesServlet</servlet class><load on startup> </load on startup></servlet><servlet mapping><servlet name>Faces Servlet</servlet name><url pattern> faces</url pattern></servlet mapping></web app>这里和Struts的web xml配置何其相似 简直一模一样 正如Struts的struts config xml一样 JSF也有类似的faces config xml配置文件 <faces config><navigation rule><from view id>/index jsp</from view id><navigation case><from oute>login</from oute><to view id>/wele jsp</to view id></navigation case></navigation rule><managed bean><managed bean name>user</managed bean name><managed bean class>rejsf UserBean</managed bean class><managed bean scope>session</managed bean scope></managed bean></faces config>在Struts config xml中有ActionForm Action以及Jsp之间的流程关系 在faces config xml中 也有这样的流程 我们具体解释一下Navigation 在index jsp中有一个事件 <h:mandButton label= Login action= login />Action的值必须匹配form oute值 上述Navigation配置表示 如果在index jsp中有一个login事件 那么事件触发后下一个页面将是wele jspJSF有一个独立的事件发生和页面导航的流程安排 这个思路比struts要非常清晰 managed bean类似Struts的ActionForm 正如可以在struts config xml中定义ActionForm的scope一样 这里也定义了managed bean的scope为session 但是如果你只以为JSF的managed bean就这点功能就错了 JSF融入了新的Ioc模式/依赖性注射等技术 Ioc模式 对于Userbean这样一个managed bean 其代码如下 public class UserBean {private String name;private String password;// PROPERTY: namepublic String getName() { return name; }public void setName(String newValue) { name = newValue; }// PROPERTY: passwordpublic String getPassword() { return password; }public void setPassword(String newValue) { password = newValue; }}<managed bean><managed bean name>user</managed bean name><managed bean class>rejsf UserBean</managed bean class><managed bean scope>session</managed bean scope><managed property><property name>name</property name><value>me</value></managed property><managed property><property name>password</property name><value>secret</value></managed property></managed bean>faces config xml这段配置其实是将 me 赋值给name 将secret赋值给password 这是采取Ioc模式中的Setter注射方式 Backing Beans 对于一个web form 我们可以使用一个bean包含其涉及的所有组件 这个bean就称为Backing Bean Backing Bean的优点是 一个单个类可以封装相关一系列功能的数据和逻辑 说白了 就是一个Javabean里包含其他Javabean 互相调用 属于Facade模式或Adapter模式 对于一个Backing Beans来说 其中包含了几个managed bean managed bean一定是有scope的 那么这其中的几个managed beans如何配置它们的scope呢?<managed bean> <managed property><property name>visit</property name><value>#{sessionScope visit}</value></managed property>这里配置了一个Backing Beans中有一个setVisit方法 将这个visit赋值为session中的visit 这样以后在程序中我们只管访问visit对象 从中获取我们希望的数据(如用户登陆注册信息) 而visit是保存在session还是application或request只需要配置既可 UI界面 JSF和Struts一样 除了JavaBeans类之外 还有页面表现元素 都是是使用标签完成的 Struts也提供了struts faces tld标签库向JSF过渡 使用Struts标签库编程复杂页面时 一个最大问题是会大量使用logic标签 这个logic如同if语句 一旦写起来 搞的JSP页面象俄罗斯方块一样 但是使用JSF标签就简洁优美 <jia:navigatorItem name= inbox label= InBox icon= /images/inbox gif action= inbox disabled= #{!authenticationBean inboxAuthorized} />如果authenticationBean中inboxAuthorized返回是假 那么这一行标签就不用显示 多干净利索!先写到这里 我会继续对JSF深入比较下去 如果研究过Jdon框架的人 可能会发现 Jdon框架的jdonframework xml中service配置和managed bean一样都使用了依赖注射 看来对Javabean的依赖注射已经迅速地成为一种新技术象征 如果你还不了解Ioc模式 赶紧补课 lishixinzhi/Article/program/Java/ky/201311/28617
使用JSF,对于这样的问题,是很简单的。至少比jsp从后台取值要简单。
举例:
xml文件中配置
<managed-bean>
<managed-bean-name>配置的Form名称</managed-bean-name>
<managed-bean-class>
Form类的路径
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
1、输入框inputText
页面:<h:inputText value="#{配置的Form名称属性名}"/>
Form中:声明属性名,建立方法从后台获得值,并传值到属性名,注意get & set
当跳转到页面时,就有值了。
2、下拉单选 selectOneMenu
页面:<h:selectOneMenu value="#{配置的Form名称属性名1}" >
<f:selectItems value="#{配置的Form名称属性名2}" />
</h:selectOneMenu>
Form中:声明属性名1,属性名2(这个肯定是集合了,如List<SelectItem>)
建立方法从后台获得值,并传值到属性名2,注意get & set
希望对你有帮助。
TeeChart图表控件
Visual Studio 2010及以上
一台PC电脑
方法/步骤
添加控件
与C# NET工具箱(ToolBox)中其它控件一样,TeeChart以组件的形式提供,如果不知道如何加载控件到工具箱的,可以查看我的分享文章:TeeChart绘图控件的安装方法,直接点击TChart后拖拽就可以添加;
TeeChart控件属性设置
与C# NET其它组件一样,TeeChart组件也有许多属性可以设置,已达到你需要的显示效果比如曲线类型、曲线粗细、图像类型、标题等,方法很简单,只需要在TeeChart控件上右键单击,在d出的菜单中选择编辑就会跳出控件属性设置界面,设置基本的属性啦;
添加曲线
在一个坐标中,可以自由绘制多条曲线,并分别设置每条曲线的颜色、粗细等,如下图所示,在控件属性设置界面,点击Series,并点击Add将出现曲线添加页面,选择你需要的曲线类型,作为演示,小编选择Line类型(连续类型);
图表标题
如上所示,小编命名拖拽出TeeChart控件名字为:tChart_Disp,要设置图表标题,比如要命名图表标题为:HelloWorld,那么只需要代码:tChart_DispText = "HelloWorld";
数据添加
一般情况会比较多使用TeeChart绘制二维曲线,所以需要两个坐标(x,y),由于计算机是数字计算机,显示屏是按像素显示的,所以数据也无比是离散数据,只是当肉眼无法看出间隔时就是连续了。需要注意的是(x,y)数据以数组保存,直接传递数组给TeeChart就可以了,语法如下:tChart_DispSeries[0]Add(xvalues, yvalues); //其中 xvalues,yvalues是(x,y)点坐标数组,请注意:(x,y)数组元素个数一定要一致!
设置纵坐标(y轴)显示范围
有时候需要设置纵坐标的显示范围,以便改善显示效果,虽然TeeChart可以自动调节显示图表,但是还是可以自定义的!首先要关闭自动设置纵坐标显示范围,而后设置纵坐标显示范围。参考示例代码:
tChart_DispAxesLeftAutomaticMaximum = false;
tChart_DispAxesLeftMaximum = otrA 105;
(注:otrA为纵坐标数组中最大值,如上设置后,纵坐标显示范围为 0 - 105倍最大纵坐标值,这样子就可以看到纵坐标显示时上方有空余空间)
开启/关闭3D显示效果
可以开启或关闭曲线的三维显示效果,进入TeeChart控件显示界面,点击Line1的Change按钮,在d出的曲线参数设置界面,勾上左下角的View 3D就可以开启3D显示效果,如果不需要,取消即可。
END
注意事项
使用TeeChart控件需要有良好的面向组件设计思想!
要熟悉自己的开发环境,使用过程中可以多查阅TeeChart文档!
以上就是关于Java框架研究——JSF与Struts的异同全部的内容,包括:Java框架研究——JSF与Struts的异同、jsf标签里单复选框默认值的问题、如何在jsf中获取组件的值并且传递到动态reg等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)