灵活的视图切换及导向

news/2024/7/8 3:57:18

  在基于请求转发型的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模板来输出结果
}

 

 




  在基于请求转发型的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模板来输出结果
}

 

 




  在基于请求转发型的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模板来输出结果
}

 

 





http://www.niftyadmin.cn/n/3648081.html

相关文章

【linux】

1、Linux系统介绍 不同于Windows,Linux是一个开源的操作系统。 Linux一切皆文件,对文件的操作有:创建文件、编辑文件、保存文件、关闭文件、重命名文件、删除文件、恢复文件。 1.1 目录结构 根目录 / bin:全称binary,含义是二进…

给网页添加背景图片html_如何使用HTML将背景图像添加到网页的顶部

给网页添加背景图片htmlHow To Build a Website With HTML 如何使用HTML构建网站This tutorial series will guide you through creating and further customizing this website using HTML, the standard markup language used to display documents in a web browser. No pri…

docker本地开发和测试_如何使用Docker和DDEV在本地计算机上开发Drupal 9网站

docker本地开发和测试The author selected the Diversity in Tech Fund to receive a donation as part of the Write for DOnations program. 作者选择了“技术多元化”基金来接受捐赠,这是Write for DOnations计划的一部分。 介绍 (Introduction) DDEV is an ope…

人性化的验证(Validate)系统

为何要验证(Validate)   验证是系统中一个必不可少的部分,前端验证、后台验证中起来往往会发现,一个简单完整的CRUD应用中,用来处理与验证有关的代码或配置就占了几乎三分之一。Struts1.x时代的验证就不提了。不管是Struts2(webwork)的验证…

小程序动画从头开始_如何从头开始在Kubernetes上部署弹性Node.js应用程序

小程序动画从头开始视频 (Video) 描述 (Description) You may have heard the buzz around Kubernetes and noticed that many companies have been rapidly adopting it. Due to its many components and vast ecosystem it can be quite confusing to find where the path st…

在easyjweb应用中关于acegi安全配置的增强

在easyjweb的应用程序中,我们习惯通过easyJWebCommand这一参数来指定服务器端控制器的执行命令。比如newsDocManage.ejf?easyJWebCommandedit&id1,将执行NewsDocManageAction中的doEdit方法。在acegi中,最简单也是最常用的权限控制是基于…

debian docker_如何在Debian 10上使用Docker和Caddy远程访问GUI应用程序

debian docker介绍 (Introduction) Even with the growing popularity of cloud services, the need for running native applications still exists. 即使云服务越来越流行,仍然需要运行本机应用程序。 By using noVNC and TigerVNC, you can run native applicat…

[挑战MVC极限]EasyJWeb-1.0特性抢先看之一简介

序  2006年,一群Java领域的大师们纷纷转向动语言,随着类似RoR这些框架的宣传及推广,我们发现动态语言确实带来了以前在Java的领域里面不曾有的思想、东西。使用传统的Java MVC框架做开发,相对于动态语言所表现出来的灵活、敏捷&…