`
fslingmo
  • 浏览: 26362 次
  • 性别: 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》是一本深入探讨Plain Old Java Object(POJO)概念和技术的书籍,其核心在于如何在Java开发中有效地使用简单、无框架依赖的对象。POJOs是Java编程中最基本的元素,它们代表了纯粹的面向对象设计,...

    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

    - 通过将业务逻辑封装在POJO中,可以更好地遵循DDD的原则,创建具有明确职责的对象。 - 使用POJO作为领域模型的基础,有助于实现业务逻辑与技术实现的解耦。 ##### 测试驱动开发(TDD) 测试驱动开发是一种软件...

    Struts2 Pojo(六)

    Pojo(Plain Old Java Object)在Struts2中扮演着重要角色,因为它们用于在Action类和视图之间传递数据。在本篇“Struts2 Pojo(六)”中,我们将深入探讨Struts2如何利用Pojo来增强其灵活性和可维护性。 首先,让...

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

    在改进后的版本中,我们可以直接在Action类中使用业务对象,进一步降低代码耦合。 6. **国际化与本地化**:Struts1提供了强大的I18N支持,通过资源包管理不同语言的文本。在新版本中,可以考虑利用注解来简化资源键...

    POJOS in Action

    1. **POJOs的概念**:解释什么是POJO,以及为什么在Java开发中使用POJOs是有益的。可能包括对比POJOs和其他框架特定对象(如EJBs)的优势。 2. **依赖注入**:详述如何使用依赖注入将POJOs与其他组件连接起来,减少...

    Action——Action的配置和作用

    在Struts2中,Action类可以是普通的Java类(POJO),也可以是继承自Struts2预定义的ActionSupport类的子类。一个类要成为Action类,必须能够处理客户端的请求,并且处理业务逻辑。继承ActionSupport类是为了获得一些...

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

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

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

    在这个项目中,`jsp`代表View,`action`和`biz`属于Controller,`dao`和`pojo`是Model的一部分。 2. **JSP (JavaServer Pages)**:JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,从而实现动态内容...

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

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

    信息系统软件设计:第3章 Struts2.0-Action知识.ppt

    - Struts2允许在Action中使用try-catch结构处理异常,也可以全局配置异常处理策略。当Action执行过程中发生异常时,可以根据异常类型决定如何响应,如显示错误页面或记录日志。 总结:在Struts2框架中,Action是...

    struts2配置详解

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

    SSH和DWR简单整合,还包括了根据Pojo反向生成数据库的经典代码

    5. **在Struts的Action中集成DWR**:通过DWR API调用远程Java方法,将结果传递给视图层。 **根据Pojo反向生成数据库表:** 这个过程通常使用Hibernate的工具,如Hibernate Tools,它可以读取Pojo类和相应的注解,...

    Pojos In Action

    - **POJO的重要性**:在现代Java开发中,尤其是轻量级企业应用中,POJO因其灵活性和可测试性而变得尤为重要。它们简化了代码结构,使得开发者可以更容易地理解和维护代码。 #### 知识点二:面向领域设计与POJO的...

    Struts2的Action讲解

    - **基于POJO的Action**:Action可以是简单的JavaBean,这意味着可以利用现有的Java类作为Action。 - **默认执行方法**:默认情况下,Struts 2.0会寻找一个名为`execute()`的方法作为入口点。但如果需要,也可以指定...

    struts2 Action编写方式

    在Struts2_first这个压缩包文件中,可能包含了使用这三种Action编写方式的示例代码。通过分析这些代码,你可以更好地理解每种方式的用法和它们之间的区别。此外,学习如何配置Struts2的配置文件(struts.xml或struts...

    iBATIS_In_Action:使用映射语句(一).doc

    然而,在.NET环境中,我们通常使用POJO(Plain Old Java Object)或POCO(Plain Old CLR Object)的概念,它们是简单的、无特定框架依赖的对象。在iBATIS中,这些对象用于表示数据库中的实体,其属性与数据库表的列...

    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 ...

    POJOQueries:简化的 POJO 验证和操作

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

    spring integration in action

    - **Spring Integration 如何简化集成开发:** 通过使用标准的 Java POJO 和 Spring Bean 定义,简化了集成应用的开发和维护过程。 #### Part 2 - 消息传递 **3: 消息和通道** - **消息模型:** 解释了 Spring ...

Global site tag (gtag.js) - Google Analytics