4、Struts标签库

Download Report

Transcript 4、Struts标签库

第四章
Struts标签库
回顾
下面这个异常是怎么回事?该怎么解决?
预习检查
<input type="text" /> 对应的Struts标签是什么?
循环处理集合数据的Struts标签是什么?
<bean:size>标签的用途是什么?
本章任务
升级房屋出租系统:
实现房屋信息查询功能
1、普通查询:
点查询后,仍返回当前页面,
查询条件保留。
2、高级查询:
使用下拉框选择区县和户型
查询条件。查询后返回查询
页面,保留查询条件。
3、用户登录后才可使用高级
查询。
4、在用户自己发布的租房信
息旁显示“编辑”和“删除”
链接。
本章目标
掌握html标签
掌握bean标签
掌握logic标签
第七讲
2.5 Struts的标签库
2.5.1 Struts Html与Bean标签
使用Html标签实现简单查询
实现简单查询需求
1、查询条件为空,则查
询全部租房信息
输入查询条件,
点查询
2、点查询后,显示查询
结果,查询条件保留。
转到查询结果页面,查询
条件仍然保留
“常规”实现方法
如何实现上述功能?
DAO
public List getFwxxList(String
title){
FwxxListForm myForm = (FwxxListForm) form;
String sql = "select … from
fwxxtitle
where
1=1 ";
String
= myForm.getTitle();
查询条件不输,则
if (null!= title && ! title.trim().equals("")
){
List list = this.fwxxBiz.getFwxxList(title);
查询全部
保存查询条件
sql += "and title like '%"request.setAttribute("list",
+ title + "%' ";
list);
}
request.setAttribute("title", title);
Action
显示上次输入
sql += " order
by date descreturn
" ; mapping.findForward("list");
的查询条件
//执行
Sql 返回结果
<input
type="text"
name="title" value="${title}" />
}
<c:forEach
items="${list}" var="fwxx">
使用Struts标签,可以
<tr>
省掉这些代码
<td><a href='detail.do?fwid=${fwxx.fwid}'>${fwxx.title}</a></td>
<td align='center' style='height:30px;'>${fwxx.zj}元</td>
<td align='center'><c:out value="${fwxx.date}"/></td>
</tr>
页面:list.jsp
</c:forEach>
如何使用Html:text标签
使用标签简化Struts开发
引入Struts标签
list.jsp
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
…
<html:form action="list" method="post">
<html:text property="title" />
title:
…
FwxxListForm的属性
</html:form>
public class FwxxListForm
extends ActionForm { 演示示例:使用html:text标签
private String title;
//getter and setter
…
FwxxListForm.java
}
Html:select标签
public class FwxxListForm
extends ActionForm {
private FWXX condition = new FWXX();
推荐做法:使用实体对象传参:
如何实现如图所示的高级查询?
//getter and setter
getFwxxList(FWXX condition)
DAO层接口怎么设计?
…
}
getFwxxList(String title,int
qxid,int jdid,int zj1,int zj2,…)
如此多查询条件,ActionForm怎么设计?
对下拉框(如区县),如
何实现“保存查询条件”功能?
<%
for (int i=0;i<options.length;++i){
if (jdid==options[i]){
out.println("<option selected='selected' >"
使用html:select将自动绑定下拉框的值
options[i]+"</option>");
}else{
out.println("<option>"+options[i]+"</option>");
}
}
+
实现x室x厅查询
使用html:select标签实现
public class FwxxListForm
extends ActionForm {
<html:select property="condition.shi">
<html:option value="0">不限-private FWXX condition
</html:option>
= new FWXX();
绑定到Form属性,
<html:option value="1">1</html:option>
//getter and setter
类似EL表达式的语法
<html:option value="2">2</html:option>
……
<html:option value="3">3</html:option>
}
</html:select>室
FwxxListForm.java
<html:select property="condition.ting">
<html:option value="0">不限-使用html:option
</html:option>
实现选项
<html:option value="1">1</html:option>
<html:option value="2">2</html:option>
</html:select> 厅
list.jsp
演示示例:使用html:select标签
html:optionsCollection标签
区县下拉框中的选项是从数据库中读取出来的,怎么实现呢?
1、Form
public class FwxxListForm
extends ActionForm {
...
private List qxList = new ArrayList();
//getter and setter
… 2、Action
}
List qxList = this.qxBiz.getQXList();
myForm.setQxList(qxList);
3、list.jsp
<html:select property="condition.qxid">
<html:optionsCollection property="qxList" label="qx" value="qxid" />
</html:select>
演示示例:使用html:optionsCollection标签
小结
要实现如下的用户信息编辑功能,请写出ActionForm代
码,并用Struts标签写出页面代码。
实体类:User
Action:UserAction
Form: UserForm
实体类
public class User{
private String name;
private String from;//籍贯
//getter and setter
...
}
bean标签
如何按照下图的要求实现数字和日期的格式化?
bean:write标签
bean:write标签用于输出文本到页面
<logic:iterate id="fwxx" name="list">
${fwxx.zj}元
<c:out value="${fwxx.date}"/>
</logic:iterate>
格式化字符串
<logic:iterate id="fwxx" name="list">
<bean:write name="fwxx" property="zj" format="#,###" />元
<bean:write name="fwxx" property="date" format="yyyy年MM月dd日" />
</logic:iterate>
bean:define标签
怎样实现:“共找到 x条记录”?
共找到 <%=list.size() %>条记录
list是保存在request的attribute
中Bean的名字,不能直接在JSP
脚本中做变量名引用
这样是可以的,不过太繁琐了。
有简单的办法么?
共找到 <%=((java.util.List)request.getAttribute("list")).size()%>条记录
bean:define标签
bean:define定义后,就可以在JSP脚本中引用了
id:变量名或pageScope属性名
type:类型
<bean:define id="dataList" name="list" type="java.util.List"
scope="request" />
共找到 <%=dataList.size()%>条记录
name、property、scope属性含义与其他Struts标签相同
bean:define标签没有输出,
根据其name和property属性取得Bean并重新定义,
以其id属性为名,
定义变量供JSP脚本使用,
并定义pageScope的Bean供其他标签使用
bean:size标签
使用bean:size标签,还可以更简单:
与bean:define标签类似,bean:size标签没有输出
<bean:size id="count" name="list" />
共找到 ${count }条记录
bean:size标签以其id属性为名,
重新定义变量,
变量的值为通过name和property取得的
集合元素的元素个数
第八讲
2.5.9 使用logic标签库
Logic标签
如何增加如下功能:
用户登录后才提供高级搜索功能,否则点“高级搜索”弹出对话
框提示“请先登录”。
在页面上嵌入java脚本实现:
<%if (session.getAttribute("user") != null) { %>
<!-- 登录后显示的页面代码 -->
...
<%} else {%>
使用logic:empty标签可
<!-- 未登录显示的页面代码 -->
以让代码更简洁
...
<%}%>
Logic:empty标签
采用标签的方式实现:
scope属性指定查找bean
的范围
<logic:empty name="user" scope="session">
<span onclick="alert('请先登录') ">高级搜索</span>
</logic:empty>
<logic:notEmpty name="user" scope="session">
<span onclick="switch('advSearch')">高级搜索</span>
</logic:notEmpty>
<logic:empty>:
判断指定的变量是否为
null,或者为空字符串
<logic:notEmpty>:
判断指定的变量不为null,
并且不为空字符串
通过name属性和可选的property属性查找Bean。 如果没有指定
scope属性,则按照page、request、session 、application的顺序
查找。
logic:equal标签
在用户自己发布的租房信息的标题后显示“编辑”和“删
除”的链接。
<logic:equal>标签:
根据name和property指
定的Bean的值和value属
性做比较,相等则显示标
签内的内容
<c:forEach items="${list}" var="fwxx">
使用logic:equal标签
...
对应Bean的名字
<a href='detail.do?fwid=${fwxx.fwid}'>${fwxx.title}</a>
<logic:equal name="fwxx" property="uid"
value="${sessionScope.user.uid}">
对应Bean的属性
[<a href="...">编辑</a>] [<a href="...">删除</a>]
</logic:equal>
相比较的值,可以是常量(如:"521"),JSP表
...
达式(如:<%=expr %>)或EL表达式。
</c:forEach>
logic:iterate标签
仅仅为了使用<c:forEach>就要引入相应的tld和jar文件。
Struts标签中提供类似功能的标签吗?
<c:forEach items="${list}" var="fwxx">
${fwxx.zj}元
<c:out value="${fwxx.date}"/>
</c:forEach>
<logic:iterate id="fwxx" name="list">
${fwxx.zj}元
<c:out value="${fwxx.date}"/>
</logic:iterate>
id属性和c:forEach的var属
性类似,会在pageScope内
声明同名的Bean
Struts标签通用属性
总结:Struts标签的通用属性
属性名称
说明
id
自定义标签创建的脚本变量名。
name
指出对应Bean的名字 。如果给出了scope属性,则仅仅在
scope中查找。否则,根据规定的顺序(page、request、
session 或 application)在各种scope中查找。
property
指出Bean中的某个属性,可以在其中检索值。如果没有标明,
则使用对象本身的值。
scope
定义了Bean在哪个范围(page、request、session 或
application)中被查找。脚本变量将在相同的范围中创建。
小结
编写页面代码实现:
1、显示注册用户列表(使用logic:iterate标签)
实体类:
public class User{
private String name;
private String from;//籍贯
private int status;
//getter and setter
}
对应Action有如下代码:
List userList = userBiz.getUserList();
request.setAttribute("data",userList);
2、status值为1为有效用户,值为0为无效用户。现要求列表中只显
示有效用户
总结
简述下列标签的用法和用途
html:text
html:select
html:option
html:optionsCollection
logic:empty
logic:equal
logic:iterate
bean:write
bean:define
bean:size
指出下列标签属性的含义
name
property
scope
id
type
format