Struts2+Spring2+Hibernate3 web应用示例(五)

来源:互联网 发布:unity3d能建模吗 编辑:程序博客网 时间:2024/04/28 13:59

七、       Web页面

 

在这一节中,主要使用到了Struts2的标签库。在这里,会对所用到的主要标签做一个初步的介绍。更多的知识请读者访问Struts的官方网站做更多的学习。在编写Web页面之前,先从总体上,对Struts 1.xStruts 2.0的标志库(Tag Library)作比较。


Struts 1.x

Struts 2.0

分类

将标志库按功能分成HTMLTilesLogicBean等几部分

严格上来说,没有分类,所有标志都在URI“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志

表达式语言(expression languages

不支持嵌入语言(EL

OGNLJSTLGroovyVelcity

 

1、主页面:index.jsp,其代码如下:

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK"/>
<title>图书管理系统</title>
</head>
<body>
<p><a href="<s:url action="list" />">进入图书管理系统</a></p>
</body>
</html>

WebRoot/index.jsp

要在JSP中使用Struts 2.0标志,先要指明标志的引入。通过在JSP的代码的顶部加入以下代码可以做到这点。<%@taglib prefix="s" uri="/struts-tags" %>

1<s:url>标签:该标签用于创建url,可以通过"param"标签提供request参数。当includeParams的值时'all'或者'get', param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值。

2、列表页面:list.jsp

<%@page pageEncoding="gb2312" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head><title>图书管理系统</title></head>
    
<style type="text/css">
        table 
{
            border: 1px solid black;
            border
-collapse: collapse;
        }

        
        table thead tr th 
{
            border: 1px solid black;
            padding: 3px;
            background
-color: #cccccc;
            background
-color: expression(this.rowIndex % 2 == 0 ? "#FFFFFF" : "#EEEEEE");
        }

        
        table tbody tr td 
{
            border: 1px solid black;
            padding: 3px;
        }

        .trs
{
            background
-color: expression(this.rowIndex % 2 == 0 ? "#FFFFFF" : "#EEEEEE");
        }

    
</style>

    
<script language="JavaScript">   
        
function doSearch(){
            
if(document.all.searchValue.value=="")
            
{    
                alert(
"请输入查询关键字!");
            }
else{
                window.location.href
="bookAdmin/list.action?queryName="+document.all.searchName.value+"
&&queryValue=
"+document.all.searchValue.value;
             }

        }

    
</script>
<body>

<table align="center">
<tr align="center">
    
<td>
        
<select name="searchName">
            
<option value="bookName">书名</option>
            
<option value="bookAuthor">作者</option>
            
<option value="bookPublish">出版社</option>
            
<option value="bookDate">出版日期</option>
            
<option value="bookIsbn">ISNB</option>
            
<option value="bookPage">页数</option>
        
</select>
        
<input type="text" name="searchValue" value="" size="10"/>
        
<input type="button" value="查询" onClick="doSearch();">
    
</td>
</tr>
<tr align="center">    
    
<td>
        
<a href="<s:url action="list" includeParams="none"/>">全部</a>
        
<a href='<s:url action="edit" ></s:url>'>增加</a>
    
</td>
</tr>
<tr>
<td>
<table cellspacing="0" align="center">
    
<thead>
    
<tr>
        
<th>书名</th>
        
<th>作者</th>
        
<th>出版社</th>
        
<th>出版日期</th>
        
<th>ISNB</th>
        
<th>页数</th>
        
<th>价格</th>
        
<th>内容提要</th>
        
<th>删除</th>
    
</tr>
    
</thead>
    
<tbody>
    
<s:iterator value="availableItems">
        
<tr class="trs">
            
<td>
            
<a href='<s:url action="edit" ><s:param name="bookId" value="bookId" /></s:url>'>
            
<s:property value="bookName"/>
            
</a>
            
</td>
            
<td><s:property value="bookAuthor"/></td>
            
<td><s:property value="bookPublish"/></td>
            
<td><s:text name="format.date"><s:param value="bookDate"/></s:text></td>     
            
<td><s:property value="bookIsbn" /></td>
            
<td><s:property value="bookPage" /></td>
            
<td><s:property value="bookPrice"/></td>
            
<td><s:property value="bookContent"/></td>
            
            
<td><a href='<s:url action="delete"><s:param name="bookId" value="bookId" /></s:url>'>删除</a></td>
        
</tr>
    
</s:iterator>
    
<tr align="right">
        
<td colspan="9">
            共
<s:property value="totalRows"/>&nbsp;
            第
<s:property value="currentPage"/>&nbsp;
            共
<s:property value="pager.getTotalPages()"/>&nbsp;
            
<a href="<s:url value="list.action">
                <s:param name=
"currentPage" value="currentPage"/>
                <s:param name=
"pagerMethod" value="'first'"/>
                
            </s:url>
">首页</a>
            
<a href="<s:url value="list.action">
                <s:param name=
"currentPage" value="currentPage"/>
                <s:param name=
"pagerMethod" value="'previous'"/>
            </s:url>
">上一页</a>
            
<a href="<s:url value="list.action">
                <s:param name=
"currentPage" value="currentPage"/>
                <s:param name=
"pagerMethod" value="'next'"/>
            </s:url>
">下一页</a>
            
<a href="<s:url value="list.action">
                <s:param name=
"currentPage" value="currentPage"/>
                <s:param name=
"pagerMethod" value="'last'"/>
            </s:url>
">尾页</a>
        
</td>
    
</tr>    
    
</tbody>
</table>
</td>
</tr>
</table>
</body>
</html>

/WebRoot/list.jsp

(1)<s:property> :得到'value'的属性,如果value没提供,默认为堆栈顶端的元素。其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

default


String

如果属性是null则显示的default

escape

true

Booelean

是否escape HTML

value

栈顶

Object

要显示的值

id


Object/String

用来标识元素的id。在UI和表单中为HTMLid属性

(2)<s:Iterator>:用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。其相关的参数及使用如下表所示:  

名称

必需

默认

类型

描述

status


String

如果设置此参数,一个IteratorStatus的实例将会压入每个遍历的堆栈

value


Object/String

要遍历的可枚举的(iteratable)数据源,或者将放入新列表(List)的对象

id


Object/String

用来标识元素的id。在UI和表单中为HTMLid属性

(3)<s:param>:为其他标签提供参数,比如include标签和bean标签. 参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object), 如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(TextTag) value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子:

<param name="color">blue</param><!-- (A) -->

<param name="color" value="blue"/><!-- (B) -->
(A)参数值会以String的格式放入statck.
(B)该值会以java.lang.Object的格式放入statck.

其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

name


String

参数名

value


String

value表达式

id


Object/String

用来标识元素的id。在UI和表单中为HTMLid属性

4)、国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。

不过,所谓没有最好,只有更好Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。

5)、list.jsp文件中:

<s:text name="format.date"><s:param value="bookDate"/></s:text>,为了正确的输出出版日期的格式,采用在资源文件中定义输出的格式,并在页面上调用。format.date就是在资源文件com.sterning.books.web.actions.BooksAction.properties中定义。当然也可以别的文件,放在别的路径下,但此时需要在web.xml中注册才可以使用它。

正如读者所见,在pojo(本例为Books.java)中将日期字段设置为java.util.Date,在映射文件中(books.hbm.xml)设置为timestamp(包括日期和时间)。为了便于管理,将日期格式保存在国际化资源文件中。如:globalMessagesglobalMessages_zh_CN文件。

其内容为:

format.date={0,date,yyyy-MM-dd}

在页面显示日期时间时:<s:text name="format.date"><s:param value="bookDate"/></s:text>。这样就解决了日期(时间)的显示格式化问题。

 

3、增加/修改页面:editBook.jsp 

<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    
<title>编辑图书</title>
    
<s:head/>
</head>
<body>
    
<h2>
        
<s:if test="null == book">
            增加图书
        
</s:if>
        
<s:else>
            编辑图书
        
</s:else>
    
</h2>
    
<s:form name="editForm" action="save" validate="true">
    
         
<s:textfield label="书名" name="book.bookName"/>
         
<s:textfield label="作者" name="book.bookAuthor"/>
         
<s:textfield label="出版社" name="book.bookPublish"/>
         
<s:datetimepicker label="出版日期" name="book.bookDate"></s:datetimepicker>
         
<s:textfield label="ISBN" name="book.bookIsbn"/>
         
<s:textfield label="页数" name="book.bookPage"/>
         
<s:textfield label="价格(元)" name="book.bookPrice"/>
         
<s:textfield label="内容摘要" name="book.bookContent"/>
         
<s:if test="null == book">
             
<s:hidden name="book.bookId" value="%{bookId}"/>
         
</s:if>         
         
<s:else>
             
<s:hidden name="book.bookId" />
         
</s:else>
         
<s:hidden name="queryName" />
         
<s:hidden name="queryValue" />
         
<s:submit value="%{getText('保存')}" />
    
</s:form>

<p><a href="<s:url action="list"/>">返回</a></p>
</body>
</html>


WebRoot/editBook.jsp

1)、<s:if><s:elseif><s:else> :执行基本的条件流转。 其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

备注

test

 

Boolean

决定标志里内容是否显示的表达式

else标志没有这个参数

id

 

Object/String

用来标识元素的id。在UI和表单中为HTMLid属性

 

 

2)、<s:text>:支持国际化信息的标签。国际化信息必须放在一个和当前action同名的resource bundle,如果没有找到相应message,tag body将被当作默认message,如果没有tag body,messagename会被作为默认message 其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

name

 

String

资源属性的名字

id

 

Object/String

用来标识元素的id。在UI和表单中为HTMLid属性



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 考老师考砸了怎么办 重要考试考砸了怎么办 二年级孩子做数学题粗心怎么办 二年级孩子考试粗心怎么办 二年级孩子考试总是粗心怎么办 二年级孩子总是粗心怎么办 小学一年级孩子抄别人作业怎么办 被老师发现抄答案怎么办 考试抄答案被老师发现怎么办 孩子撒谎不写作业怎么办 小学生做题容易马虎出错怎么办 小学生做题老是马虎怎么办 小学生做题马虎不认真怎么办 会做的题总做错怎么办 孩子数学做题粗心怎么办 孩子成绩考差了怎么办 孩子静不下心学习怎么办 孩子考试时总是粗心马虎怎么办 小学二年级学生厌学怎么办 三岁宝宝肚脐痛怎么办 做题速度太慢怎么办 孩子做题不动脑不会转弯怎么办? 孩子做题总是马虎怎么办 孩子做题总是眼高手低怎么办 小孩说幼儿园老师不喜欢他怎么办 初中学生了不喜欢读书怎么办 小孩吐怎么办给揉哪里 8岁了不爱写字怎么办呢 8岁了不会写字怎么办呢 高考做题时犯各种粗心错误怎么办 孩子做题不认真读题怎么办 孩子不爱学习怎么办有什么办法 小孩字写的不好怎么办 孩子的字写得丑怎么办 一年级孩子生字默不出来怎么办 5岁宝宝不爱写字怎么办 三年级小孩不自觉做作业怎么办 一年级的孩子不爱写字怎么办 一年级孩子不爱写作业怎么办 一年级的小孩不爱写字怎么办 小孩儿写字做作业磨蹭怎么办