创建视图
视图用JSP创建,用Struts标签库同表单Java bean交互,意味着所有的表单元素都必须用Struts标签库来创建。清单H所示为有关的源代码,你可以从中了解视图的外观。
正如你所看到的那样,除了格式化以外该文件中几乎再无其他内容。事实上,文档内连修饰性文本都没有,这是因为你已经把所有的文本保存在了一个属性文件里。在你配置servlet的时候你就会用到一个应用程序资源文件:ApplicationResources,该文件会从WEB-INF/classes/ApplicationResources.properties装载。该文件就是包含页面文本消息的属性文件。装载ApplicationResources.properties有助于创建应用程序的国际化版本。请查看清单I中显示的属性文件内容。
接下来我们再回到登录视图。如果你查看视图的HTML代码,你会注意到所有的HTML标签都是用标签库编码的。这就是Struts调整HTML文档和表单Java
bean之间参数值的方法。在处理每一JSP页面时。标签库会被扩展为HTML,而内部的Java bean则包含默认值。最后出现的页面如图A所示。
图A
JSP登录页面
然后我们再看看如何创建表单Java bean以捕获来自浏览器的输入信息。
创建表单Java bean
每一个表单Java bean都是一个小小的Java类,其中包含了带设置和提取函数的属性。对视图中所具有的表单输入而言,表单视图中都具有相应的属性。如果你回忆下struts-config.xml文件中的代码,你应该记得发给bloggerLogin.action的请求都被发送给了bloggerUserForm,后者就是一个Java
bean。
清单J即是bloggerUserForm的代码。现在我们就来了解一下提取(getter)和设置(setter)函数如何用于操作属性。
实际上,登录视图中用到的两种属性都在Java 类中得到了表示。
为了搞清楚所有以上一切是如何组织起来的,我们再来看看action类以及业务逻辑的实现原理。
创建action类
action类的任务最繁重。Action类
bloggerUserAction读取
bloggerUserForm的值并将其保存到名为
bloggerUser的Java
bean。为什么要把这些参数值保存在Java bean里呢?这是因为今后还需要以不同形式用到这些值。实际上,它们就是会话过程中的全局参数值。这些信息之后由用户用在请求和视图之间的通讯过程中。你的action类将利用Blogger服务认证用户并且获取将要修改的有效页面。该类的代码如
清单K所示。
每一种action类都必须执行一定的方法,这些方法在需要实现某些行为的时候由控制器servlet执行。如
清单L所示。所用到的表单Java bean保存在ActionForm中。
你可以调用表单的参数提取方法从表单获取参数值进行处理。通过在请求中设置属性的方式,你还可以在JSP的表单中设置默认值(参看
清单M)。
在
清单N中,你还可以由此检查全局Java bean,也就是bloggerUser是否已经装载。否则,你可以实例化一个新的。然后给bloggerUser
Java bean设置来自表单的参数值。
现在考察业务逻辑。在
清单O中你提出自己的XML-RPC请求并把结果保存在 Java bean内。
在
清单P,中,你把全局Java bean bloggerUser保存在b_user会话属性中,并把该用户信息转发给JSP页面bloggerPost,后者对应struts-config.xml文件中的bloggerPort.jsp。
然后,从以上代码你就可以了解到MVC模式下一系列的处理过程了,我们看看下一个视图,了解下如果从视图内同全局Java bean交互。
更智能的视图
视图并不完全排斥逻辑。有时你需要给表单自身增加点“智力”,比如动态创建表单元素或者显示对某些字段的访问等。
清单Q所示bloggerPost.jsp中的表单在用户成功登录之后返回给用户,它根据先前的XML-RPC请求来动态地创建选择框。
按照
清单R中的代码所示,你已经捕获了用户输入的用户名和口令值并将其链接到Java bean b_user。这正是在执行action
类的时候在会话属性的bloggerUser Java bean中保存的名字。
你还能通过b_user这个 Java bean的使用反复迭带授权可编辑的页面。b_user Java bean具有一个blogs属性,它是一个ID号的ArrayList
(Struts执行b_user的getBlogs()函数获得这个属性)。ArrayList的各个元素都保存在本地Java bean b_result中,你可以用来作为html:option的值以创建弹出式菜单,如
清单S所示。
最后显示的页面如图B所示。
图B
显示页面
以上的这个JSP页面不仅仅只是传递信息;它实际上还具有某些构造页面的逻辑。你也可以编写其他JSP标签来创建简单或复杂的视图。但是,这里的思想是,任何对视图的处理只能同表示视图有关。而真正的后台处理或者其他业务逻辑都不能放在JSP视图之内。
你已经看到,Struts是一种采用MVC模式创建Web应用程序的强大框架。随着你开发的应用程序变得越发复杂,你最终会发现利用这个好东西照样可以快速创建出崭新的视图、可重用的组件和Java bean。
用户评论