`
fslingmo
  • 浏览: 25805 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

Action中使用POJO

阅读更多

Struts2能够自动为Action的属性赋值,也能为属性的属性即POJO的属性赋值。Struts2中推荐使用POJO,这样面对对象化会更好一些,也更简单。相对于Struts1.x中使用POJO。Struts2.x更贴心一些。

 

1.图书馆Action

 

虽然普通的javaBean也可以用做Action,但是最好跟业务中的POJO区分开来,例如,这里使用Book作为业务POJO类,使用BookAction作为Action类,里面包含一个Book类型的属性,用于接受浏览器提交的数据。BookAction定义了3种操作:显示添加书籍页面、添加书籍、列出所有书籍、清空书籍。代码如下:

 

 

package com.action;

import java.util.ArrayList;
import java.util.List;

import com.javaBean.Book;

public class BookAction {
	public static List<Book> bookList = new ArrayList<Book>();
	private String title;
	private Book book;
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
 
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	public String initAdd(){
		return "initAdd";
	}
	public String add(){
		bookList.add(book);
		title ="<br/><br/>添加书籍成功<br/><br/>";
		return "success";
	}
	public String list(){
		return "list";
	}
	public String  clear(){
		bookList.clear();
		title= "<br/><br/>清空书籍列表成功<br/><br/>";
		return "list";
	}
	public List<Book> getBookList(){
		return bookList;
	}

}

 

 

这里BokAction并没有实现Action接口,也没有继承自ActionSupport类。

 

提示:Struts1.x使用POJO时,必须使用new显示地创建一个对象。而Struts2.不需要,如果没有对象,会在运行时通过反射实例化一个对象,因此不会抛出NullPointerException。

 

补充:Struts1.x的代码:

 

package com.action;

import java.util.ArrayList;
import java.util.List;

import com.javaBean.Book;

public class BookAction {
	public static List<Book> bookList = new ArrayList<Book>();
	private String title;
	private Book book = new Book();//必须new出来一个对象,否则会抛出 NullPointerException

           ....................下同


}

 

2.图书实体Book类

 

看一下业务POJO类Book。Book中包含3个属性:书名、作者以及Date类型的出版日期。Struts2.x也能自动转化Date类型数据、Struts2.x有一个迷人的日期类型转化器,但是功能有限,只能转化形如“2008-08-08”的日期,如果转化失败,还会抛出异常。

 

代码:

 

package com.javaBean;

import java.sql.Date;

public class Book {
      private String name;//书名
      private String author;//作者
      private Date publishedDate;//出版日期
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public Date getPublishedDate() {
		return publishedDate;
	}
	public void setPublishedDate(Date publishedDate) {
		this.publishedDate = publishedDate;
	}
      
}

 

BookAction中没有任何操作Book属性的代码。Struts2自动完成Book属性的赋值,通过getter方法设置到Book对象中。

 

3.通配符配置Action

 

Struts2.x也支持通配符配置Action。例如在action名称中使用“*”配置action名称,可以使用多个“*”。“*”代表的内容也可以在本Action配置内部使用{1}、{2}等引用,其中{1}表示第一个“*”内容,{2}表示第二个“*”的内容,依次类推。例如BookAction的配置:

 

<action name="*Book" class="com.action.BookAction" method="{1}">
	 	<result>/successBook.jsp</result>
	 	<result name="{1}">{1}Book.jsp</result>
	 	<result name="input">/initAddBook.jsp</result>
	 	<result name="list">/listBook.jsp</result>
</action>

 

提示:这里把method属性用通配符定义为{1},表示使用initAddBook.action访问时,执行initAdd()方法,使用llistBook.action访问时,执行list()。

 

 

4.jsp添加、列表页面

 

jsp中使用Struts2标签显示数据。仍然使用Struts2表单标签生成默认的页面布局。显示URL时使用的是<struts:url/>标签,该标签会在运行时将“.action”自动添加在后面。如果Struts.properties中修改了“.action”后缀,该标签也会自动添加为新的后缀。添加书籍的页面代码如下:

 

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  
  </head>
  
  <body>
     <a href="<s:url action="initAddBook"/>">添加数据</a><!-- URL标签引用 -->
     <a href="<s:url action="listBook"/>">书籍列表</a><!-- 自动添加“.action” -->
     <a href="<s:url action="clearBook"/>">清空书籍列表</a>
     <s:form action="addBook">
     	<s:label value="添加书籍"></s:label>
     	<s:textfield name="book.name" label="书名"></s:textfield>
     	<s:textfield name="book.author" label="作者"></s:textfield>
     	<s:textfield name="book.publishedDate" label="出版日期"></s:textfield>
		<s:submit value="添加"></s:submit>
     </s:form>
  </body>
</html>
 

除了会追加“.action”后缀,<struts:url/>默认还会追加地址栏参数。有些时候这个特性很好用,但并不是所有情况下都合适。可以使用<s:url action="initAddBook" includeParams="none"/>将禁止本标签的自动追加参数特性。或者在struts.properties中禁止所有的<s:url/>的自动追加参数特性。代码为:

 

#禁止所有<struts:url/>标签的自动追加参数特性
struts.url.includeParams=none
 

 添加成功页面很简单,只输出一句成功信息,这里省略了。书籍列表页面使用<s:iterator/>遍历Action的bookList,显示书名、作者。出版日期等。代码如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title><s:property value="title" escape="false"/></title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
     <a href="<s:url action="initAddBook"/>">添加数据</a><!-- URL标签引用 -->
     <a href="<s:url action="listBook"/>">书籍列表</a><!-- 自动添加“.action” -->
     <a href="<s:url action="clearBook"/>">清空书籍列表</a>
      <table>
         <tr>
      		<th>书名</th>
      		<th>作者</th>
      		<th>出版日期</th>
      	</tr>
      	<s:iterator id="book" value="bookList">
      		<tr>
      			<td>${book.name }</td>
      			<td>${book.author }</td>
      			<td>${book.publishedDate }</td>
      		</tr>
      	</s:iterator>
      </table>
      <s:property value="title" escape="false"/>
  </body>
</html>
 

注意: 本例使用了POJO作为Action类,没有继承ActionSupport,也没有实现IAction接口。但是如果要使用Struts2提供的数据验证、错误显示等,则仍需要继承ActionSupport类。

 

 

 

分享到:
评论

相关推荐

    POJO In action 代码

    POJO In action 代码 POJO In action 代码 POJO In action 代码

    POJO in Action (en)

    POJO in Action I love deadlines. I like the whooshing sound they make as they fly by. --Douglas Adams

    POJO IN ACTION

    POJOs in Action填补了空白:从实践角度阐述了成功构建J2EE项目之各种不同层次级所用的技术 全面涵盖了当下在开发人员社区里热议的EJB 3.0和POJO等话题

    Eclipse 插件 生成dao层实现类 和服务层 action等

    生成struts2 dwr spring 配置文件和数据操作类(com.comm 中BaseDao) idao层 dao层的实现类 Service 层和IService层 总的情况为... pojo 所在pojo类的Action 选中 多个pojo类 右键点击 一键生成dwr struts2 spring 选项

    《POJOs in Action》(pdf)英文版下载

    本书摘自Chris Richardson撰写的POJOs in Action (ISBN 1932394583),由Manning Publications公司出版,版权所有:2006年。 博文链接:https://projector.iteye.com/blog/209555

    大学 毕业设计 项目实训 java网站(jsp+servlet+filter编写的MVC三层架构(jsp,action,biz,dao,pojo).zip

    大学 毕业设计 项目实训 java网站(jsp+servlet+filter编写的MVC三层架构(jsp,action,biz,dao,pojo).zip

    struts2配置详解

    从 Struts1 升级到 Struts2: 1、Struts1 里使用 ActionServlet 作为控制器;... Struts2 中任何一个 POJO 都可以是一个 Action 类. 5、Struts2 在页面里使用 OGNL 来显示各种对象模型, 可以不再使用 EL 和 JSTL

    POJOS in Action

    找这本书的话 肯定知道这本书的价值我就不都说的了

    POJOQueries:简化的 POJO 验证和操作

    POJO查询当您想要验证或增强普通旧 Java 对象中的字段集时,POJOQueries 提供了一个开箱即用的解决方案,使用简单的查询来简化操作。 boolean result = new POJOQuery&lt;&gt;().from(event).with("actor").eq("abc")....

    Spring in Action(第二版 中文高清版).part2

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    Spring in Action(第二版 中文高清版).part1

    16.4.3 在JSF页面中使用Spring Bean 16.4.4 在JSF中暴露应用程序环境 16.5 Spring中带有DWR的支持Ajax的应用程序 16.5.1 直接Web远程控制 16.5.2 访问Spring管理的Bean DWR 16.6 小结 附录A 装配Spring A.1 ...

    POJOs.in.Action

    《POJOS IN ACTION中文版:用轻量级框架开发企业应用》是一本实践指南,它围绕POJO(普通Java对象)构造了一个完整的应用程序,对框架之间的各种组合进行了详细的举例说明;描述了在采用POJO和轻量级框架如Hibernate...

    Spring in Action(第2版)中文版

    16.4.3在jsf页面中使用springbean 16.4.4在jsf中暴露应用程序环境 16.5spring中带有dwr的支持ajax的应用程序 16.5.1直接web远程控制 16.5.2访问spring管理的beandwr 16.6小结 附录a装配spring a.1下载spring ...

    Manning Spring in Action 2nd Edition

    PART 1 CORE SPRING ...............................................................1 1 ■ Springing into action 3 2 ■ Basic bean wiring 31 3 ■ Advanced bean wiring 72 4 ■ Advising beans ...

    mule in action 说明+文档介绍

    mule in action 和doc文档详细介绍 Mule的核心组件是UMO(Universal Message Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议...

    ssh.rar_Action!_service dao_ssh action_ssh com.dao_ssh dao

    基于ssh三层架构的JAVA开发简单示例,包含service,dao,action,pojo

    再改struts1.2.*,让struts1再焕发表春,支持Annotation和POJO风格的Action

    NULL 博文链接:https://sam1982.iteye.com/blog/715461

    使用模型驱动方便从表单获取用户输入的值

    在Action类中构建模型驱动并设置它的泛型(可以是POJO类中,即数据库表的映射类) public class SupplierSort_Action extends BaseAction implements ModelDriven&lt;SupplierSort&gt;{ //调用数据访问层 ...

    struts2 Action编写方式

    Action类的三种编写方式。POJO,实现Action类,继承ActionSupport。实例代码。

    Struts1与Struts2本质区别

    即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用作Struts 2的Action。 2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求...

Global site tag (gtag.js) - Google Analytics