下面的源码和操作步骤依据java web整合开发王者归来第16章,16.7 Action中使用POJO:p464

pojo:就是javabean的意思,下面就是struts2操作javabean代码过程

1.web.xml文件内容

  web.xml文件内容是通用的过滤器配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name> <filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

2.struts.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts> <package name="main" extends="struts-default">
<action name="*Book" class="com.zyf.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> //疑点:这条语句为什么不能去掉,因为有上面的name="{1}",按照语法不是已经包括这条了么?实验过程中,如果没这条就会错误。 </action> </package> </struts>

3.action之BookAction.java代码

package com.zyf.action;

import java.util.ArrayList;
import java.util.List; import com.opensymphony.xwork2.ActionSupport;
import com.zyf.bean.Book; public class BookAction extends ActionSupport{
public static List<Book> bookList = new ArrayList<Book>();
private String title;
private Book book; // 添加书籍页面
public String initAdd() {
return "initAdd";
} // 添加书籍
public String add() {
bookList.add(book); //这个地方的book,按照java的基础语法,应该是不能直接使用的,因为book可能是空的,书上所说,struts2会在运行过程中通过反射创建一个对象,因此不会抛出NullPointException.
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;
} //疑点,BookList是static修饰的,如果用myeclipse自动生成的话,方法前面会加上static,但是如果有static的话,数据不能保存下来,我在页面点查询列表就插叙不到结果,这个地方疑问,加了static有什么不一样的地方么?
public void setBookList(List<Book> bookList) {
BookAction.bookList = bookList;
} 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;
}
}

4.javabean之Book.java代码

package com.zyf.bean;

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;
} }

5.首页面之initAddBook.jsp代码:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <%@ taglib uri="/struts-tags" prefix="s" %>
<%@ taglib uri="/struts-dojo-tags" prefix="sx" %> //这个地方新添加了一个标签库,因为书本上的struts2版本可能早了,如果这个地方不修改,下面还使用ajax的主题的话,会出错。使用这个标签库,需要添加jar,我用的是:struts2-dojo-plugin-2.1.8
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> <sx:head/> //注:这个地方使用的标签就不是struts2的标签了 <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>
<a href="<s:url action="listBook"/>">书籍列表</a>
<a href="<s:url action="clearBook"/>">清除书籍</a> <s:form action="addBook" validate="ture">
<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>

  标签说明:

 <s:form>:struts用于输出表单的标签,validate属性为true表示表单提交前对输入数据进行验证,从上面代码,你会发现,其中没有table,tr,td标签,因为<s:form>会自动生成<table>标签;

<s:textfield>标签输出一个HTML单行文本输入控件,等价于HTML代码<input type=”text”>,name对应于<input name>,而label对应于<input/>输入框前面的提示

 <s:submit>标签即html中对应的type=submit,用于提交


6.成功页面之successBook.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<a href="<s:url action="initAddBook" />">添加书籍</a>
<a href="<s:url action="listBook" />">书籍列表</a>
<a href="<s:url action="clearBook" />">清空书籍列表</a> <s:property value="title" escape="false"/>
ŠŸ
</body>
</html>

<s:url>标签一般和超链接 <a>一起使用,用于带多个参数,用于指定要处理的action,后面还有param,includeParams,includeContext ,Method ,namespace等属性,但是一般不用,关于<s:url>标签详细使用方法,可以参看http://www.cnblogs.com/zyf2013/p/3439289.html或者http://www.cnblogs.com/yaowen/archive/2013/02/21/2920596.html

<s:property>标签的escape属性默认值为true,即不解析html代码,直接将其输出。若想要输出html的效果,则要改为false

  关于不解析html代码(理解有点小困难,s:property就是输出用的,解析不解析有区别么?难道value里面会出现很多html代码?)


7.查询页面之listBook.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <%@ taglib uri="/struts-tags" prefix="s" %> <!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">
--> <style type="text/css">
table {border-collapse: collapse; border: 1px solid #000000; margin-top: 20px; }
th, td {border: 1px solid #000000; font-size: 12px; }
body {font-size: 12px; }
</style>
</head> <body> <a href="<s:url action="initAddBook" />">添加书籍</a>
<a href="<s:url action="listBook" />">书籍列表</a>
<a href="<s:url action="clearBook" />">清空书籍列表</a> <s:property value="title" escape="false"/>
<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>
</body>
</html>

下面是我找到的iterator标签的相关:

  <s:iterator>迭代标签:用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象,value属性表示集合或枚举对象,status属性表示当前循环的对象,在循环体内部可以引用该对象的属性
  <s:iterator value="userList" status="user">
    姓名:<s:property value="user.userName" />
    年龄:<s:property value="user.age" />
  </s:iterator>

  不过上面所说的和程序中用到的不相符呀。

8.发布之后的效果图如下:

   

首页:添加书籍                      查询列表              清空列表之后的页面

struts2操作pojo之小工程struts2ActionPOJO的更多相关文章

  1. NSFileManager文件操作的十个小功能

    NSFileManager文件操作的十个小功能 NSFileManager是一个单列类,也是一个文件管理器.可以通过NSFileManager创建文件夹.创建文件.写文件.读文件内容等等基本功能. 下 ...

  2. struts2操作数据库

    struts2操作数据库是刚開始学习的人的一个难点也是一个重点,如今我为大家解说一下struts2操作数据库,使用struts2对数据库进行增.删.改.查和分页查询,请看以下的代码: User类 pu ...

  3. JS操作Cookies的小例子

    这篇文章介绍了JS操作Cookies的小例子,有需要的朋友可以参考一下. 您可能感兴趣的文章:js 保存与获取cookie的代码javascript cookie操作实例详解javascript co ...

  4. 警告(alert 消息对话框) 如果你不点击“确定”,就不能对网页做任何操作,这个小窗口就是使用alert实现的

    警告(alert 消息对话框) 我们在访问网站的时候,有时会突然弹出一个小窗口,上面写着一段提示信息文字.如果你不点击"确定",就不能对网页做任何操作,这个小窗口就是使用alert ...

  5. Python对list操作的一些小技巧

    Python对list操作的一些小技巧  由于要搞数学建模,于是从熟悉已久的C++转战Python.虽然才上手,但是Python的语法糖就让我大呼过瘾.不得不说相比于C/C++,Python对于数据的 ...

  6. Android应用程序开发之图片操作(二)——工程图片资源的加载及OOM的处理

    (一)工程图片资源的加载方法 在Android应用程序开发之图片操作(一)中,详细说明了如何操作各种资源图片,只是有的没有附上示例代码,在此,我将针对项目工程中的图片资源的显示加载进行说明.官方说明, ...

  7. WinForm操作隐藏的小知识点

    这次的项目需要使用Winform来实现,我们使用的是CSkin的皮肤.文章主要记录使用过程中遇到的小问题,也是楼主网上查找很久才找到的,这里总结下. 插件地址: 使用SKinDataGridView出 ...

  8. struts2框架快速入门小案例

    struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: a ...

  9. 关于Objective-C 对象release操作的一个小问题探讨

    来源:http://blog.csdn.net/duxinfeng2010/article/details/8757211 最近遇到这样一个问题,以前的时候并未注意:新建一个工程,然后添加一个类,文件 ...

随机推荐

  1. angular中实现jQuery的Document Ready

    angular中不推荐混用JQuery的,原因呢问度娘. 其实这是一个比较蛋疼的问题,尤其是angular2.0,尽量不要在页面上写js,用ts写到模块里面去吧.. 汲取各位先人的智慧,还是列一下 w ...

  2. AJAX里调用AJAX,作定时进度刷新

    这个确实搞了一段时间,但成就感有啦... 哈哈,这个自动部署平吧,异步队列CELERY+REDIS,发布进度实时AJAX的技术点全部打通!!! 而获取实时进度,我用的是RESTFUL FRAMEWOR ...

  3. JSON数据与JavaScript对象转换

    使用JSON时,最基本的工作就是JSON数据与JavaScript对象之间的互相转换.如浏览器 从服务器端获得JSON数据,然后转换为JavaScript对象在网页输出. SON: JavaScrip ...

  4. Android Training精要(三)不同分辨率图片缩放倍数

    各DPI图片倍率 xhdpi: 2.0 hdpi: 1.5 mdpi: 1.0 (baseline) ldpi: 0.75 这就意味着如果有一张xhdpi下200*200的图片, 你应该提供同样的图片 ...

  5. 【CF】323 Div2. D. Once Again...

    挺有意思的一道题目.考虑长度为n的数组,重复n次,可以得到n*n的最长上升子序列.同理,也可以得到n*n的最长下降子序列.因此,把t分成prefix(上升子序列) + cycle(one intege ...

  6. C#的装箱和拆箱

    1:装箱 其实就是将一个值类型的转换成一个引用类型,或者把值类型转换成一个被该值类型那个应用的接口类型,这个过程会使用堆栈.被装箱的值是作为一个复制赋给对象的. int  intValue = 100 ...

  7. [YZOJ1579]&&[BZOJ2450]arr

    Description 给出3*n个数xi,要求构造三个长度为n的序列ai,bi,ci,使得满足下列条件: 1到3*n的每个数都在三个序列中的某个出现一次且仅一次: S=sum((x[ai]-x[bi ...

  8. Android学习笔记(十四)方便实用的首选项-PreferenceActivity

    突然发现已经好多天没更新博客了,最近公司项目正在进行一个大跨度的重构,又碰上有新需求,一连好多天都是很晚才到家.其实这篇博文在草稿箱里面也存了很久了,本来想着不发了,不过感觉PreferenceAct ...

  9. MVC Model 数据注解与验证

    常用验证特性: using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Sch ...

  10. 解决eclipse插件svn不显示svn信息和显示的信息为数字的问题

    1.选择window-->preferences如下图 通过上面步骤svn信息便显示了 2.解决显示的信息为数字问题 选择svn-label decoration format里面的author ...