> 设为首页 加入收藏 关于我们
 
 
首页 新闻 技术 教程 框架 源码 服务中心  
 
 
  合作 MyRSS 博客 wiki 社区
 
信息搜索: 全部网站 easyjf.com
  当前位置:首页-EasyJWeb
灵活的视图切换及导向
作者:大峡 来源:  发布时间:2007-08-21
杏仁黄 秋叶褐 胭脂红 芥末绿 天蓝 雪青 灰 银河白(默认色)
 

  在基于请求转发型的MVC框架中,给用户提供一个简单、灵活的视图切换及页面导向功能是非常关键的。作为EasyJWeb特性介绍系统的一篇文章,本篇主要介绍EasyJWeb中的页面切换及导向机制。EasyJWeb引入了纯模板的机制,通过其提供结构清晰的Module、Command、Page等结构,从而能实现非常简单灵活的视图切换及导向。
1、快捷方法,使用最简单的方式满足你80%的视图切换及页面导向需求
  在AbstractCmdAction中,提供了forward及go方法来满足不同的页面导向需求。下面给出具有代表性的视图切换及页面导向示例:
forward(“list”)-转到本模块中的list命令处执行;
forward(“person.new”)-转到person模块中的new命令执行;
forward(“new”,”person”)-与forward(“person.new”)相同;
page(“list”)-直接使用逻辑名称为list模板来作当前命令的输出;
go(“list”)-开启一个全新的request请求,执行当前模块的list命令;
go(“person.list”)-开启一个全新的request请求,执行person模块的list命令;
go(“list”,”person”)-与go(“person.list”)相同;
go(“list?parentId=5”)-开启一个全新的request请求,执行list命令,并往action中传递parentId参数。

2、视图切换及对象
  EasyJWeb中的页面结果是由Page来代表的,当前只提供了三种类型的Page,即template、html及null。其中template代表模板页面,html代表导向页面,null表示不返回信息。可以通过每一个Action中的execute方法中的Module参数,来读取配置

public void doEdit()
{
}

在当前模块的Page。
如return module.finadPage(“list”);
也可以在Action中直接构造一个Page对象来进行视图的切换及导向。
如 return new Page(“index”,”/news/index.html”);

3、聪明的AbstractPageCmdAction
  在AbstractCmdAction的基础上,EasyJWeb提供了另外一个对视图具有自动识别能力的AbstractPageCmdAction。该类能通过应用“惯例代替配置”来智能判断程序中要使用的视图模板,甚至不需要书写方法签名也可以调用视图模板。
如一个空签名的command方法:

  该方法中虽然没有一句代码,也没有明确的视图切换或转向。但AbstractPageCmdAction会根据惯例原则,自动选择edit.html文件作为视图模板。
  另外针对下面的url:person.ejf?cmd=new或/ejf/person/new
假如PersonAction中没有doNew方法,则AbstractPageCmdAction会根据惯例原则,优先考虑/views/person/目录中是存存在new.html文件,若存在,则将直接返回该模板,即不用写java方法,也能产生动态页面。

  作为一个应用实践之一,在我们开发一般的WEB应用中,我们习惯于把前台及后台分开,比如所有前台展示的放在一个模块Module(即Action)中。网站前台经常会有非常多的页面,而这些页面或多或少都会包含相同或相似逻辑的动态内容,此时若针对每一个页面都写一个Command来处理,显得很麻烦。可以借助Velocity的标签,以及AbstractPageCmdAction中的视图界面智能选择功能,不用写java方法,即加载各种动态页面。
  下面是EasyJF官方网站NewsAction中的代码,类似这样的代码同也用于很多EasyJF开源团队所开发的开源及商业项目中:

public class NewsAction extends AbstractPageCmdAction {
 
private NewsUtil newsUtil;
 @InjectDisable
 
private Map utils = new HashMap();
 
public void setNewsUtil(NewsUtil newsUtil) {
  
this.newsUtil = newsUtil;
 }

 
public void setUtils(java.util.Map utils) {
  
this.utils = utils;
 }


 
public Object doAfter(WebForm form, Module module) {
  form.addResult(
"nu", newsUtil);
  form.addResult(
"NU", newsUtil);
  java.util.Iterator it 
= utils.entrySet().iterator();
  
if (it != null{
   
while (it.hasNext()) {
    Map.Entry en 
= (Map.Entry) it.next();
    form.addResult((String) en.getKey(), en.getValue());
   }

  }

  
return super.doAfter(form, module);
 }

}


 

/news.ejf?cmd=index
/news.ejf?cmd=technic
/news.ejf?cmd=download
  可以这么说,前台诸多的动态页面,都不需要书写Java代码,就能实现动态内容生成。如果你借助一些基础引擎,比如EasyJF开发的CMS引擎来或者是自己构造一些引擎,完全可以实现不用写Java代码,就能开发出功能比较强的Java Web应用。比如建一个站点、建论坛、百科、Blog、全文检索等。
4、重定向输出流
假如你希望你Action的执行结果不要直接输出的浏览器上,而是直接输出到服务器上的一个文件中保存起来(生成静态html是我们在建大型网站中所必须的),或者是输出到互联网上的某一个终端或结点。EasyJWeb给你提供了最简单解决方案,你随时可以根据需要对Action执行结果进行重定向,比如下面的Action中,我们可以把输出结果指定到服务器上d:\myapp\news.html文件中。

public void doNews(){
java.io.Writer writer
= new OutputStreamWriter(new FileOutputStream(new File("d:\myapp\news.html")),"UTF-8");
ActionContext.getContext().setCustomWriter(writer);
//执行news命令的一系列逻辑
page(“news”);//使用news模板来输出结果
}

 

评论】 【加入收藏】 【推荐给朋友】 【字体:  】 【关闭 
 
团队常用资源链接
《EasyJF办公室及联系方式》
《如何参与EasyJF开源工作》
EasyJF协同及版本控制-SVN
《EasyJF团队章程》
《EasyJF团队成员工作手册》
《EasyJF成员名单》
《EasyJF项目列表》
《EasyJF开源基金赞助名单》
 
 
EasyJWeb
EasyJWeb是基于
java技术,应用于
WEB应用程序快速
开发的MVC框架,
框架设计构思来源于国内众多项
目实践,框架旨在借鉴当前主要
流行的开源Web框架(Struts、
JSF、Tapestry 、Webwork),吸
取其优点及精华,利用
Velocity作为模板页面引擎,实
现页面及代码完全分离的MVC开发
取框架。
EasyJF开源CMS
EasyJF开源CMS
有常用CMS系统的
基本功能,另外还
有自动html文件生
成、AJAX级联菜单、积分系统、
权限管理等功能,支持UBB。该论
坛系统使用基于OO的方法设计,
采用多层B/S构架,数据库持久层
使用Hibernate,Web层使用
Struts框架,java代码与页面
完全分离,易扩展。
EasyJF开源博客系统
EasyJF开源博客系
统基本的博客的书
写、博客圈、流量
统计、排名、个人
像册、音乐、专题等功能。支持
自定义模板、静态html文件生成
、服务器集群、权限系统、积分
系统等。系统使用基于OO的方法
设计,采用多层B/S构架,数据库
持久层使用EasyDBO,Web层使用
EasyJWeb框架,java代码与页面
完全分离,易扩展。
EasyDBO
EasyDBO是一个非
常适合中小型软件
数据库开发的数据
持久层框架,系统
参考hibernate、JDO等,结合中
小项目软件的开发实际,实现简
单的对象-关系数据库映射。

友情连接
LUPA开源论坛 Java研究组织(JR)  与JAVA共舞  java视野   Java开源大全   BlogJava      Jdon解道 SpringSide   天乙论坛   CowNew开源团队  AgileJava开源   javathinker   CSDN Java频道  赛迪网Java频道 中国Eclipse社区   Java家   Java中文站 FireFox中锁文网   java天下   ideagrace   解惑

Copyright (C) 2005 EasyJF.com, All Rights Reserved
版权所有 简易java框架网

渝ICP备06004507号 如有意见请与我们联系 Powered by EasyJFramework