SSH实战OA 05:Struts2标签
2017-04-29 01:59
405 查看
Struts2标签库提供了主题、模板支持,极大地简化了视图页面的编写,而且,struts2的主题、模板都提供了很好的扩展性。实现了更好的代码复用。Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。本文仅给出常用的struts标签的用法,这些标签的分类有:通用标签,控制流程标签、ajax标签、UI标签等。
在搭建好的Struts2工程下新建TagsAction.java,代码如下:
这个action的逻辑很简单,复写了父类的execute()方法的代码逻辑向前端返回了一句错误信息和一个SUCCESS的视图。这个action有3个属性,分别是:username,password,id,并生成相应的getter/setter方法,除此之外该action还有一个空的构造方法。
struts.xml配置文件如下:
本文的重点放在struts的标签,所以struts.xml做了最简单的配置,只配置了一个action,并且定义了一个前端的返回视图tags.jsp。
tags.jsp的最开始状态如下:
使用struts2的标签,引入struts2的taglib是第一步。上诉的jsp代码是最简单的使用property的用法。
在浏览器中输入下列链接:
服务器将会向前端浏览器输出
property:u
第一行的li是我们常用的OGNL表达式取出了username的值,value值是OGNL表达式。第二行的用法是将’username’作为字符串输出来,而不是希望struts标签将我们的字符串解析。第三行多了一个default属性值,当没有id作为参数传递进来的时候就显示defalut里面的内容,当有id值传递进来的时候就显示id的值。如下面的两个案例输出:
url:
输出:
property设置默认值:1
url:
property设置默认值:没有id
第四个li里面的property用法,当escape为true时value的值当作是普通字符输出,而当时escape为false时浏览器将作为html标签来解析,比如上诉的escape为false,此时浏览器当作标签< hr />来输出,既多出了一横。
set标签主要作用是在jsp页面中定义变量,本案例中我们将参数传递进来的username值赋给变量adminName,之后用property方法从作用域中取出值。第一个li是set赋值的用法,第2到4是将set取出来的用法。需要注意的后面带有指定作用域的scope的用法,当我们指定了变量的作用域时,取出时需要指定我们的作用域。
这里用到了我们的javaBean Dog,Dog的代码如下:
Dog类只有一个name属性,一个空的构造方法一个带参数的构造方法,还覆盖toString方法。当然本类的输出语句是为了更好的看参数输出情况,你也可以去除输出语句。
jsp的bean标签的name指定了Dog类的全路径,param标签对其属性进行赋值。由于我给dog的name属性赋予了”大黄”的值,用debug标签可以看到:
同时页面输出:
bean 定义bean,并使用param来设定新的属性值:
bean 查看debug情况: 取出值:Sam
struts的inlcude标签用法与jsp的include差不多。上诉的两个静态html文件如下:
myDemo1.html
myDemo2.html
可能由于版本bug问题,英文静态html能够正常加载进来,而中文静态html没有正常加载进来,建议用jsp自带的include语句。
这里用到的parameters是什么鬼?就是我们url传递的参数,在HttpServletRequest有一个方法getParamters(String str)就是从这个parameters里面获取jsp向Servlet传递参数的。
本代码片段逻辑是先从url获取parameters.sex[0]参数,赋值为sex变量,然后利用struts判断标签判断sex的值,如果sex等于1则为男,sex等于2则为女,其他是输出未知。
在本案例中我输入的url如下:
浏览器输出如下:
if elseif else的用法: sex参数的值是=1
将parameters.sex[0]的值赋到age变量中去
用户性别=男
username是否为空: 否
集合的遍历在项目开发中经常用到,第一个li给出了最简单的集合遍历方法。第二个li的标签中将集合的每个元素赋值给变量word,再将其输出。第三个li的status用法能够显示出当前的元素的状态出来。
第4和第5个li下面的标签展示了map的用法,在迭代标签s:iterator中嵌套property标签,可以依次取出key值,再取出value,依次的将map的key-value取出来。
最后浏览器输出如图:
在搭建好的Struts2工程下新建TagsAction.java,代码如下:
import com.opensymphony.xwork2.ActionSupport; public class TagsAction extends ActionSupport { private String password; private String username; private String id; public TagsAction() { } @Override public String execute() throws Exception { this.addFieldError("fielderror.test", "用户名或密码出错!"); return this.SUCCESS; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
这个action的逻辑很简单,复写了父类的execute()方法的代码逻辑向前端返回了一句错误信息和一个SUCCESS的视图。这个action有3个属性,分别是:username,password,id,并生成相应的getter/setter方法,除此之外该action还有一个空的构造方法。
struts.xml配置文件如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" /> --> <!-- <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant> --> <constant name="struts.devMode" value="true" /> <constant name="struts.ui.theme" value="simple" /> <package name="tags" extends="struts-default"> <action name="tagsAction" class="com.shizongger.tags.TagsAction"> <result>/tags.jsp</result> </action> </package> </struts>
本文的重点放在struts的标签,所以struts.xml做了最简单的配置,只配置了一个action,并且定义了一个前端的返回视图tags.jsp。
tags.jsp的最开始状态如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Struts-Tags学习案例</title> </head> <body> <ol> <li>property:<s:property value="username" /></li> </ol> </body> </html>
使用struts2的标签,引入struts2的taglib是第一步。上诉的jsp代码是最简单的使用property的用法。
在浏览器中输入下列链接:
http://localhost:8080/StrutsTags/tagsAction.action?username=u&password=p
服务器将会向前端浏览器输出
property:u
property用法
property的常用法还有以下几种:<li>property:<s:property value="username" /></li> <li>property取值为字符串:<s:property value="'username'"/></li> <li>property设置默认值:<s:property value="id" default="没有id" /></li> <li>property设定html:<s:property value="'<hr />'" escape="false" /></li> <hr />
第一行的li是我们常用的OGNL表达式取出了username的值,value值是OGNL表达式。第二行的用法是将’username’作为字符串输出来,而不是希望struts标签将我们的字符串解析。第三行多了一个default属性值,当没有id作为参数传递进来的时候就显示defalut里面的内容,当有id值传递进来的时候就显示id的值。如下面的两个案例输出:
url:
http://localhost:8080/StrutsTags/tagsAction.action?username=u&password=p&id=1
输出:
property设置默认值:1
url:
http://localhost:8080/StrutsTags/tagsAction.action?username=u&password=p
property设置默认值:没有id
第四个li里面的property用法,当escape为true时value的值当作是普通字符输出,而当时escape为false时浏览器将作为html标签来解析,比如上诉的escape为false,此时浏览器当作标签< hr />来输出,既多出了一横。
set标签用法
<li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li> <li>s标签从request中取出adminName:<s:property value="#request.adminName" /></li> <li>s标签从ActionContext中取出adminName:<s:property value="adminName" /></li> <li>s标签从ActionContext中取出adminName:<s:property value="#adminName" /></li> <li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="reqeust" /></li> <li>使用#取出adminPassword:<s:property value="#adminPassword" /></li> <li>从session取出:<s:property value="#session.adminPassword" /></li> <li>从request取出:<s:property value="#request.adminPassword" /></li> <hr />
set标签主要作用是在jsp页面中定义变量,本案例中我们将参数传递进来的username值赋给变量adminName,之后用property方法从作用域中取出值。第一个li是set赋值的用法,第2到4是将set取出来的用法。需要注意的后面带有指定作用域的scope的用法,当我们指定了变量的作用域时,取出时需要指定我们的作用域。
bean、param标签使用
<li>bean 定义bean,并使用param来设定新的属性值: <s:bean name="com.shizongger.tags.Dog"> <s:param name="name" value="大黄" /> <s:property value="name" /> </s:bean> </li> <li>bean 查看debug情况: <s:bean name="com.shizongger.tags.Dog" var="myDog"> <s:param name="name" value="'Sam'" /> </s:bean> 取出值:<s:property value="#myDog.name" /> </li> <hr />
这里用到了我们的javaBean Dog,Dog的代码如下:
public class Dog { private String name; public Dog() { System.out.println("Dog无参构造方法"); } public Dog(String name) { System.out.println("Dog有参构造方法,name = " + name); this.name = name; } public String getName() { return name; } public void setName(String name) { System.out.println("name = " + name); this.name = name; } @Override public String toString() { return "Dog [name=" + name + "]"; } }
Dog类只有一个name属性,一个空的构造方法一个带参数的构造方法,还覆盖toString方法。当然本类的输出语句是为了更好的看参数输出情况,你也可以去除输出语句。
jsp的bean标签的name指定了Dog类的全路径,param标签对其属性进行赋值。由于我给dog的name属性赋予了”大黄”的值,用debug标签可以看到:
同时页面输出:
bean 定义bean,并使用param来设定新的属性值:
bean 查看debug情况: 取出值:Sam
include标签
<li>include mydemo1.html 包含静态英文页面 <s:include value="/myDemo1.html"></s:include> </li> <li>include mydemo2.html 包含静态中文页面 <s:include value="/myDemo2.html"></s:include> </li> <li>include _include1.html 包含静态英文文件,说明%用法 <s:set var="incPage" value="%{'/myDemo1.html'}" /> <s:include value="%{#incPage}"></s:include> </li> <hr />
struts的inlcude标签用法与jsp的include差不多。上诉的两个静态html文件如下:
myDemo1.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>_include1.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=GB18030"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <h3>This is the head</h3> <p>This is a Paragram.</p> </body> </html>
myDemo2.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>_include1.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=GB18030"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <h3>This is the head</h3> <p>中文字符的段落.</p> </body> </html>
可能由于版本bug问题,英文静态html能够正常加载进来,而中文静态html没有正常加载进来,建议用jsp自带的include语句。
if elseif else标签的用法
<li>if elseif else的用法: sex参数的值是=<s:property value="#parameters.sex[0]"/><br /> 将parameters.sex[0]的值赋到age变量中去<s:set name="sex" value="#parameters.sex[0]"></s:set><br /> 用户性别=<s:if test="#sex == 1">男</s:if> <s:elseif test="#sex == 2">女</s:elseif> <s:else>未知</s:else> </li> <li>username是否为空: <s:if test="#parameters.username == null">是</s:if> <s:else>否</s:else> </li> <hr />
这里用到的parameters是什么鬼?就是我们url传递的参数,在HttpServletRequest有一个方法getParamters(String str)就是从这个parameters里面获取jsp向Servlet传递参数的。
本代码片段逻辑是先从url获取parameters.sex[0]参数,赋值为sex变量,然后利用struts判断标签判断sex的值,如果sex等于1则为男,sex等于2则为女,其他是输出未知。
在本案例中我输入的url如下:
http://localhost:8080/StrutsTags/tagsAction.action?username=u&password=p&sex=1
浏览器输出如下:
if elseif else的用法: sex参数的值是=1
将parameters.sex[0]的值赋到age变量中去
用户性别=男
username是否为空: 否
遍历集合
<li>遍历集合:<br /> <s:iterator value="{'hello','to','struts','tags'}"> <s:property/> </s:iterator> </li> <li>自定义变量:<br /> <s:iterator value="{'this','is','the','self','define','struts','tags'}" var="word"> <s:property value="#word.toUpperCase()"/> </s:iterator>! </li> <li>使用status:<br /> <s:iterator value="{'this','is','the','self','define','struts','tags'}" status="status"> <s:property/>-> 已经遍历了元素的个数:<s:property value="#status.count" /> . 元素的索引:<s:property value="#status.index" /> . 当前是偶数?:<s:property value="#status.even" /> . 当前是奇数? :<s:property value="#status.odd" /> . 是否是集合第一个元素?:<s:property value="#status.first" /> . 是否是集合最后一个元素? :<s:property value="#status.last" /> <br /> </s:iterator> </li> <li> <s:iterator value="#{001:'root', 002:'admin', 003:'shizongger'}"> key = <s:property value="key"/> ,value = <s:property value="value" /><br /> </s:iterator> </li> <li> <s:iterator value="#{001:'Sam', 002:'Big Huang',003:'Perk'}" var="dog"> key = <s:property value="#dog.key" /> ,value = <s:property value="#dog.value" /><br /> </s:iterator> </li> <hr />
集合的遍历在项目开发中经常用到,第一个li给出了最简单的集合遍历方法。第二个li的标签中将集合的每个元素赋值给变量word,再将其输出。第三个li的status用法能够显示出当前的元素的状态出来。
第4和第5个li下面的标签展示了map的用法,在迭代标签s:iterator中嵌套property标签,可以依次取出key值,再取出value,依次的将map的key-value取出来。
最后浏览器输出如图:
相关文章推荐
- SSH实战OA 04:Struts2的OGNL表达式
- SSH实战OA 11:BBS模块
- OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql) 学习笔记(含源代码)
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
- OA (ssh) 基本实现(poi 生成 Excel , struts2动态下载 mysql数据库文件) 学习笔记(含源代码)
- Struts2常用标签(转载)--【SSH】
- 【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
- 【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
- 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2(转载)
- struts_05 各种验证器,ognl表达式,struts2常用标签,防止表单重复提交,jfreeChart插件的运用
- 【SSH网上商城项目实战05】完成数据库的级联查询和分页
- JAVAEE——SSH项目实战05:用户注册、登陆校验拦截器、员工拜访客户功能和MD5加密
- 【05】SSH练习——struts2和json 的整合
- 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2
- 【SSH网上商城项目实战07】Struts2和Json的整合
- 【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
- 【SSH网上商城项目实战07】Struts2和Json的整合
- 在ssh中用struts2标签读取list数组集合
- 【SSH网上商城项目实战13】Struts2实现文件上传功能
- 05(maven+SSH)网上商城项目实战之Spring mvc项目搭建