Web MVC框架-命令及页面跳转

来源:互联网 发布:软件体系结构 树状 编辑:程序博客网 时间:2024/05/22 09:02

   对于开发对于页面连接尤如蜘蛛网一样,经常会有一堆具有千头万绪的关联页面组成的大中型Web应用来说,如何组织及处理页面的跳转成为一个MVC框架非常关键因素。Struts1之所以能得到大家的认可,是因为他基本解决了数据与视图分离的问题,之所以Struts升级一个版本到Struts2后不再“Struts”了,核心原因除了框架核心技术落后、很多地方受限制以外,一个原因是他无法很好地组织及处理页面跳转问题。当然尽管升级到了Struts2,但相对于Rails等新兴MVC的框架来说,显得死板了很多。
   而EasyJWeb在页面组织及处理页面跳转等方面,提供了很多更加灵活的功能,很多思想来自于Spring MVC、Rails等一些新兴Web框架的精髓,他能让你用比较简洁的代码、甚至不用代码来实现页面的跳转。
  在Web应用程序开发中,我们经常遇到如下的需求:
  1、从这个页面连接到另外一个页面;
  2、在服务器执行完某一段程序后,把输出导向另外一个页面;
  3、在服务器端执行完某一段程序后,把输出导向到另外一段程序继续执行;
  4、在服务器程序执行完后,选择使用一个页面呈现用户输出;
  5、页面跳转要具有较强的环境适应能力,比如部署在跟目录下跟部署到其它Context目录下都能执行正确的跳转;
  6、还有更变态的,比如EasyJF官网,要求使用动态地址访问的时候,看到的地址全是动态,当使用静态地址访问的时候,地址全是静态的,Java Web服务器不能工作了,Apache或IIS也要保证网页能正常访问。
  7、有的人喜欢使用/user/edit/1这样的url,有的人喜欢使用/user.ejf?cmd=edit&id=1这样的url,我们要求不管使用哪一种url样式访问页面,连接都会非常友好的变成用户喜爱的形式。

   可以说,现在很少有框架能完全满足或者为用户考虑到如此复杂多变而对于我们国人来说应用性又非常广泛的需求。一些框架即使提供上面一些功能也是以书写复杂的代码及配置文件为代价的。在EasyJWeb中,提供了上面所列的这些功能,并提供了非常简洁的调用接口及方法。
   针对上面的几点,EasyJWeb的解决方案:
  1,这个用标签,不用说了。
  2、在服务器执行完某一段程序后,把输出导向另外一个页面;
  返回html类型的Page对象。
  3、在服务器端执行完某一段程序后,把输出导向到另外一段程序继续执行;
   使用forward或者go方法。
  4、在服务器程序执行完后,选择使用一个页面呈现用户输出;
   使用page方法。
  5、页面跳转要具有较强的环境适应能力,比如部署在跟目录下跟部署到其它Context目录下都能执行正确的跳转;
  在页面模板中使用$html.url,比如:用户列表。
  6、不同地址样式转移
  在页面模板中使用$html.forward,比如技术前沿。这样动态的时候访问到的是news.ejf?cmd= technic,静态的时候访问到的是/news/technic.html。
  7、传统及现代的URL样式转换
   仍然是使用$html.url,或$html.forward标签,他能感知你的url样式。比如:添加用户。你使用user.ejf?cmd=lsit,访问应用,则当点添加user.ejf?cmd=add。而如果你使用/ejf/user/list访问应用,则编辑按钮的连接变成ejf/user/add。
  
  在代码中,除了可以使用最原始的return new Page()方式返回用户的视图模板以外,还可以使用一些快捷方法来实现灵活的视图查询及跳转。比如,go、forward、page等方法。下面看一个用户添删改查的示例中的Action代码如下:

import com.easyjf.container.annonation.Inject;
import com.easyjf.core.support.query.QueryObject;
import com.easyjf.util.CommUtil;
import com.easyjf.web.WebForm;
import com.easyjf.web.core.AbstractPageCmdAction;
import com.easyjf.web.tools.IPageList;

public class UserAction extends AbstractPageCmdAction {
 
 @Inject
 
private UserService service;
 
 
public void setService(UserService service) {
  
this.service = service;
 }

 
/**
  * 显示添加用户的界面user/edit.html
  
*/

 
public void add()
 
{
  page(
"edit");
 }

 
public void edit(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  form.addPo(user);
 }

 
public void save(WebForm form)
 
{
  User user
=form.toPo(User.class);
  
if(hasErrors())
  
{
   page(
"edit");
   
return;
  }

  service.saveUser(user);
  forward(
"list");
 }

 
public void update(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  form.toPo(user,
true);
  
if(hasErrors())
  
{
   page(
"edit");
   
return;
  }

  service.updateUser(user);
  forward(
"list");
 }

 
public void delete(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  service.delUser(user);
  go(
"list");
 }

 
public void list(WebForm form)
 
{
  QueryObject qo
=form.toPo(QueryObject.class);
  IPageList pageList
=service.queryUser(qo);
  CommUtil.saveIPageList2WebForm(pageList, form);  
 }

}


UserService接口:
public interface UserService {
 
/**
  * 根据id查询用户
  * 
  * 
@param id
  * 
@return
  
*/

 User getUser(Long id);

 
/**
  * 保存用户
  * 
  * 
@param user
  
*/

 
void saveUser(User user);

 
/**
  * 修改用户信息
  * 
  * 
@param user
  
*/

 
void updateUser(User user);

 
/**
  * 删除用户
  * 
  * 
@param user
  
*/

 
void delUser(User user);

 
/**
  * 查询用户信息
  * 
@param query 
  * 
@return 分页信息及记录集
  
*/

 IPageList queryUser(IQueryObject query);
}


 



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1934413


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 狗狗前腿外八字怎么办 20岁走路内八字怎么办 9岁儿童脚内八字怎么办 5岁宝宝脚内八字怎么办 一岁宝宝内八字怎么办 两人八字合不合怎么办 考到不好的大学怎么办 考的大学不理想怎么办 只考上二本大学怎么办 w7电脑中病毒了怎么办 电脑中病毒了该怎么办 泰迪呼吸急促怎么办啊 狗狗呼吸急促是怎么办 狗狗着凉了呕吐怎么办 狗鼻子流黄鼻涕怎么办 刚出生婴儿睡觉不踏实怎么办 有人溺水后你该怎么办 借钱不还怎么办没欠条 私人欠货款不还怎么办 公司欠货款不还怎么办 两个人离婚一方不同意怎么办 比亚迪l3油耗高怎么办 u盘密码忘记了怎么办 主板没有m.2接口怎么办 点痣留下了疤怎么办 危险三角区长痘痘怎么办 挤了危险三角区怎么办 三角区长痘挤了怎么办 三角区发红长痘怎么办 激光祛斑碰水了怎么办 激光打痣留下坑怎么办 点痣之后留下坑怎么办 去痣留下的红印怎么办 激光点痦子留疤怎么办 激光点痣的疤痕怎么办 做完眉毛碰水了怎么办 脸上疤掉了有坑怎么办 结痂不小心抠掉怎么办 脸上肉松弛怎么办19岁 点痣留下来的疤怎么办 激光祛斑的红印怎么办