当前位置:天才代写 > tutorial > JAVA 教程 > 利用SpringSide 3.1.4.3开拓Web项目标全进程(中)

利用SpringSide 3.1.4.3开拓Web项目标全进程(中)

2017-11-11 08:00 星期六 所属: JAVA 教程 浏览:424

副标题#e#

第七步、编写Action和JSP。在SpringSide 3.1.4.3中,利用的是Struts 2及 其Convention插件,已经不是前面利用的CodeBehind插件了,关于Convention插 件,这里要再说几句,该插件的大部门成果和 CodeBehind沟通,独一让人有点 疑惑的就是该插件到那边寻找Action类的问题,它会按照 struts.convention.package.locators属性的值来抉择,在该项目中,其值为“ web”,之需要查阅一下 struts.xml文件即可知。这说明,Convention会寻找所 有包括“web”这个单词的包,并在该包及其子包中寻找Action类。这也正是 Action层的包名为personal.youxia.web的原因。

关于SpringSide 3种的Struts的探讨,各人可以看看我之前写的一篇文章 SpringSide 3 中的 Struts 2

ArticleAction的实现思路如下,修改index.jsp,使其重定向到 article.action,该Action默认挪用其list要领显示所有文章,并返回 article.jsp作为其视图。在该视图上,有添加文章的毗连,点击该毗连则会见 article!input.action,这时会挪用ArticleAction的input要领,并返回 article-input.jsp作为其视图,在该视图中输入文章的内容,点击生存,挪用 article!save.action,这时会挪用ArticleAction的save要领以生存数据,假如 要删除文章,则挪用 article!delete.action,这时会挪用ArticleAction的 delete要领。在挪用以上要领的进程中,会自动挪用 prepare系列的要领。

因此,该步调涉及到三个JSP文件和一个Action类,它们别离是

index.jsp

article.jsp

article-input.jsp

ArticleAction.java

index.jsp的修改很简朴,只是让项目一启动后就去会见ArticleAction,而 不是默认的UserAction。index.jsp的代码如下:

<% response.sendRedirect("article.action"); %>

这时,重点进入到ArticleAction中,建设该Action,其代码的框架如下:

package personal.youxia.web;
import personal.youxia.entity.entities.Article;
public class ArticleAction extends  CrudActionSupport<Article> {
     @Override
     public String delete() throws Exception {
         // TODO Auto-generated method stub
         return null;
     }
     @Override
     public String list() throws Exception {
         // TODO Auto-generated method stub
         return null;
     }
     @Override
     protected void prepareModel() throws Exception {
         // TODO Auto-generated method stub
     }
     @Override
     public String save() throws Exception {
         // TODO Auto-generated method stub
         return null;
     }
     public Article getModel() {
         // TODO Auto-generated method stub
         return null;
     }
}


#p#副标题#e#

可以看到,该Action从CrudActionSupport类担任,而CrudActionSupport又 担任自ActionSupport,并实现了ModelDriven和Preparable接口,这样Struts 2 的ModelDriven拦截器和Preparable拦截器就会对我们本身的Action产生浸染。 CrudActionSupport中的 excute要领默认的实现是挪用list要领,所以会见 article.action就便是会见ArticleAction的list要领,该要领的目标是为了列 出所有的文章,所以在该要领中利用了ArticleDao的分页查询,查询功效放在一 个page工具中。在Struts 2中,已经没有了ActionForm的观念,可以直接把 Action工具通报到视图中,为了可以或许在视图中会见page工具,只需要把page工具 作为 ArticleAction的一个属性即可。先在ArticleAction.java中插手几行代码 :

@Autowired
     private ArticleManager articleManager;
     public void setArticleManager(ArticleManager  articleManager) {
         this.articleManager = articleManager;
     }

     private Page<Article> page = new  Page<Article>(10);

     public Page<Article> getPage() {
         return page;
     }

可以看到该代码的浸染是为了注入ArticleManager和初始化Page工具,此时 list要领的代码就很是简朴,如下:

@Override
     public String list() throws Exception {
         page = articleManager.getAll(page);
         return SUCCESS;
     }

#p#分页标题#e#

由于该要领只是简朴获取一个页面的Acticle,所以代码很简朴,利用 articleManager.getAll要领即可。假如要实现巨大的条件查询,就需要建设一 个包括PropertyFilter工具的列表,然后利用articleManager.search要领举办 查询,为了简化 PropertyFilter工具列表的建设,白衣提供了 HibernateWebUtils.buildPropertyFilters()静态要领供各人利用。

list要领返回的是SUCCESS,因此返回给用户的视图页面为article.jsp,该 页面应该存放在WEB-INF目次的content目次中,这也是Convention插件的一个特 性,这样用户就没有步伐直接会见到视图页面了。在该页面中,可以通过会见 page工具来显示数据,如下:

<%@ page language="java" contentType="text/html;  charset=UTF-8"
     pageEncoding="UTF-8"%>
<%@ include file="/common/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01  Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF -8">
<title>Insert title here</title>
</head>
<body>
<table>
     <tr><td><a href="article!input.action">添加文章 </a></td></tr>
     <s:iterator value="page.result">
         <tr>
             <td>${subject}</td>
             <td><a href="article!delete.action?id=${id}">删除 </a></td>
         </tr>
         <tr>
             <td>${content}</td>
         </tr>
     </s:iterator>
</table>
</body>
</html>

假如数据库中有初始数据的话,该项目运行结果如下图:

操作SpringSide 3.1.4.3开辟Web项方针全历程(中)

#p#副标题#e#

到今朝为止,还没有涉及到getModel()、prepareModel()、以及prepare系列 的要领,可是,一旦需要添加可能删除文章,这一系列的要领就有浸染了。在 Struts 2中,由于没有了ActionForm的观念,所有的页面传入参数城市被注入到 Action中,假如不想在Action中搞太多的getter和 setter,最有效的要领就是 提供一个Model工具,这时候拦截器会把页面参数注入到Model中,而在今朝的项 目中,没有比Entity类更适合做 Model工具的了。通过调查CrudActionSupport 基类,可以发明只有在执行save和input要领之前,才会执行 prepareModel要领 ,该要领可以担保getModel要领返回的工具不是一个空指针,而挪用delete要领 之前Model工具没有初始化,可是delete要领只需要一个id作为参数,因此,可 以在Action中增加一个id属性来满意要求。这时候,有窜改的几行代码如下:

private Long id;
     private Article article;
     public void setId(Long id) {
         this.id = id;
     }
     @Override
     protected void prepareModel() throws Exception {
         if (id != null) {
             article = articleManager.get(id);
         } else {
             article = new Article();
         }
     }
     public Article getModel() {
         return article;
     }
     @Override
     public String delete() throws Exception {
         articleManager.delete(id);
         return RELOAD;
     }

这里需要出格存眷的是delete要领返回的值,为RELOAD,这是一个在基类中 界说好了的字符串。返回该字符串的目标,是为了在delete 要领执行完之后, 不返回任何视图页面,而是以redirect的方法再次挪用article.action,以便显 示删除文章后的功效。因此,需要在 ArticleAction中利用@Result注解,如下 :

@Results( { @Result(name = CrudActionSupport.RELOAD, location  = "article.action", type = "redirect") })

颠末如上修改,这时候再运行应用,就发明可以或许删除文章了。

再来实现添加文章的成果,从上面的article.jsp中可以看出,添加文章的链 接为article!input.action,此时,会运行 ArticleAction的input要领,该方 法只是简朴返回article-input.jsp视图文件作为用户输入文章的接口, article- input.jsp的代码如下:

#p#分页标题#e#

<%@ page language="java" contentType="text/html;  charset=UTF-8"
     pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01  Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF -8">
<title>Insert title here</title>
</head>
<body>
<form id="inputForm" action="article!save.action"  method="post">
<table class="inputView">
     <tr>
         <td>主题:</td>
         <td><input type="text" name="subject" size="40"  id="subject" /></td>
     </tr>
     <tr>
         <td>内容:</td>
         <td><textarea name="content"  id="subject"></textarea></td>
     </tr>
     <tr>
         <td colspan="2">
             <input type="submit" value="提交" />&nbsp;
             <input type="button" value="打消" onclick="history.back ()"/>
         </td>
     </tr>
</table>
</form>
</body>
</html>

而ArticleAction中只需要修改如下几行,由于ModelDriven拦截器已经把网 页中传入的数据注入到了article工具中,所以save要领中只需要执行简朴的保 存操纵即可:

@Override
     public String input() throws Exception {
         return INPUT;
     }

     @Override
     public String save() throws Exception {
         articleManager.save(article);
         return RELOAD;
     }

至于实现文章的修改成果,那也是通过input要领和save要领实现的,只不外 此时网页参数中会包括一个有效的id,而prepare系列的要了解按照该id先从数据库中提取数据,然后显示在article-input.jsp中,用户修改后,再挪用save 要领生存到数据库中。为淘汰本博文长度,该成果此处不做示范。

通过上面的步调可以发明,利用SpringSide 3中推荐的CRUD一体的模式,可 以有效淘汰Action的数量和JSP文件的数量,每实现一个增删查改成果,只需要 一个Action和两个JSP,可是,措施员必然要对个中的数据流向有富裕的认识, 才气理清它们之间的干系,不至于晕头转向。

到这里各人会发明,ArticleAction谁都可以会见,一点都不安详,所以第八 步我会探讨如何让ArticleAction和SpringSecurity一起事情,至于第九步,当 然是把项目从单数据库情况变动到大都据库情况了。详细内容,且看下回解析!

 

    关键字:

天才代写-代写联系方式