jsf-api.jar和jsf-impl.jar的两个包就是;注意那个JSP的标准标签库jstl.jar,把它跟jsf的包放在一起,你不一定用标准标签库,但是JSF用到了它。
我把JSF的doc放在这里给大家下载,因为这个东西实在不好找,有人知道好的下载URL,可以在这里贴一个。
把这些包放在一个web application的lib目录里面有,你的程序你可以使用JSF的强大功能了。让我也来俗气一下,写一个简单的hello world作为今天的结束吧。注意在你的web application里面的web.xml配置文件添加了Face Servlet的声明和URI映射。
<%@ taglib uri=\<%@ taglib uri=\
欢迎来到ArcGIS Server ADF 世界
4
保存后访问Http://servername:port/faces/hello.jsp即可,如果页面能够出来,那么恭喜您,您已经迈入了JSF wonderland的大门。
3、ArcGIS Server Java ADF开发的JSF知识介绍
ArcGIS Server 的Java ADF 开发使用到了JSF的知识,下面结合ArcGIS Server的开发,介绍一下JSF的知识
Struts和JSF/Tapestry都属于表现层框架,这两种分属不同性质的框架,后者是一种事件驱动型的组件模型,而Struts只是单纯的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就可以方便实现,
#{login.userId}表示从名为login的JavaBean的getUserId获得的结果,这个功能使用struts也可以实现,name=\ 关键是第二行,这里表示如果userId的值改变并且确定提交后,将触发调用类UserLoginChanged的processValueChanged(...)方法。 JSF可以为组件提供两种事件:Value Changed和 Action.相当于struts中表单提交Action机制,它的JSF写法如下: 5 Struts和JSF都是一种框架,JSF必须需要两种包JSF核心包、JSTL包(标签库),此外,JSF还将使用到Apache项目的一些commons包,这些Apache包只要部署在你的服务器中既可。 JSF包下载地址:http://java.sun.com/j2ee/javaserverfaces/download.html选择其中Reference Implementation。 JSTL包下载在http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 所以,从JSF的驱动包组成看,其开源基因也占据很大的比重,JSF是一个SUN伙伴们工业标准和开源之间的一个混血儿。 上述两个地址下载的jar合并在一起就是JSF所需要的全部驱动包了。在ArcGIS Server的项目下的lib目录下有相关的库文件如下:commons-beanutils.jar commons-collections.jar commons-digester.jar commons-lang-2.0.jar commons-logging.jar jsf-api.jar jsf-impl.jar jstl.jar standard.jar 与Struts的驱动包一样,这些驱动包必须位于Web项目的WEB-INF/lib,和Struts一样的是也必须在web.xml中有如下配置: 这里和Struts的web.xml配置相似,简直一模一样。 正如Struts的struts-config.xml一样,JSF也有类似的faces-config.xml配置文件: 在Struts-config.xml中有ActionForm Action以及Jsp之间的流程关系,在faces-config.xml中, 6 也有这样的流程,我们具体解释一下Navigation: 举例:如果在mapviewer.jsp中有一个事件: JSF有一个独立的事件发生和页面导航的流程安排,这个思路比struts要非常清晰。 UI界面 JSF和Struts一样,除了JavaBeans类之外,还有页面表现元素,都是是使用标签完成的,Struts也提供了struts-faces.tld标签库向JSF过渡。 使用Struts标签库编程复杂页面时,一个最大问题是会大量使用logic标签,这个logic如同if语句,一旦写起来,搞的JSP页面象俄罗斯方块一样,但是使用JSF标签就简洁优美: disabled=\如果authenticationBean中inboxAuthorized返回是假,那么这一行标签就不用显示,多干净利索! 缺点: JSF这类框架面临的最大问题,它大量的使用了标签库,目前流行的网页制作工具(如 deamweaver)又没有提供足够的支持,所以只能依靠挖掘dataTable标签的各个属性,并且大量依赖css才能实现页面的美化。如果java世界能有一个强大的JSF IDE,能够提供vs.net一样的能力,那么JSF也许会更容易流行。 4、ArcGIS Server 开发初步 -- 自定义工具 在Server生成的Web App中,页面的工具按钮可以分为两类: l命令(Command):A command is an element on a JSP page that triggers a server side action without any further interaction on the client. An example of a command in the sample application is the \full extent\。不与用户通过界面交互。 l工具(Tool):A tool has further client side interaction before calling a method on the server. An example of a tool in this application is \ rectangle over the map indicating the area they want to zoom to, and then a method is called on the server。与用户通过界面交互。 一、继承接口 public Interface com.esri.adf.web.faces.event.MapToolAction{ void execute(MapEvent event); } lMapToolAction 接口代表由MapControl控件事件所激活的服务器端工具,系统已预设继承此接口的类: 7 PanToolAction(平移), ZoomInToolAction(放大), ZoomOutToolAction(缩小) lMapControl 创建MapEvent 事件并将其传给继承接口的工具类的 execute(MapEvent) 函数,The business logic for the tool should be implemented in this method according to the event。 二、工具在JSP页面上的tag表达如下: serverAction=\ clientAction=\ clientPostBack=\/> 三、注册managed-bean将所写的类作为一个managed-bean注册到faces-config.xml,并用WebContext实例作为其初始化参数: 1. JSP的Tag中serverAction写入继承MapToolAction接口的类(全称),代表对于此工具服务器端要进行的操作[ execute(MapEvent event)] 用户也可以使用任何Managed Bean的函数作为工具对应的方法,只要这个函数使用如下声明: public void anyMethodName(MapEvent event) JSP标签使用serverMethod ,如下: 8