18_Struts 2.x 标签

来源:互联网 发布:网络广告创意方法 编辑:程序博客网 时间:2024/05/16 08:16

18.1 Struts 2.x标签

18.1.1 Struts2标签与EL表达式

新版本中推荐使用OGNL语言取代EL表达式

18.1.2 Struts2标签tld文件


18.2 OGNL语言

18.2.1 OGNL概述

OGNL全称为Object-Graph Navigation Language

OGNL主要有3个符号:#,%与$

18.2.2 #声明OGNL表达式

#parameters——request.getParameterValues()

#request——request.getAttribute()

#session——session.getAttribute()

#application——application.getAttribute()

#attr——一次查找request,session,application中的属性

OgnlAction.java

package com.uikoo9.action;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.uikoo9.model.Magazine;public class OgnlAction {private HttpServletRequest request;private ServletContext application;private Map<String, Object> session;@SuppressWarnings("serial")private List<Magazine> magazineList = new ArrayList<Magazine>(){{add(new Magazine("时代周刊",10));add(new Magazine("足球之夜",19));add(new Magazine("时尚",20));add(new Magazine("时代影视",50));}};//executepublic String execute(){request = ServletActionContext.getRequest();application = ServletActionContext.getServletContext();session = new HashMap<String, Object>();request.setAttribute("account", "account from request");application.setAttribute("account", "account from application");session.put("account", "account from session");return "success";}//getters and setterspublic HttpServletRequest getRequest() {return request;}public void setRequest(HttpServletRequest request) {this.request = request;}public ServletContext getApplication() {return application;}public void setApplication(ServletContext application) {this.application = application;}public Map<String, Object> getSession() {return session;}public void setSession(Map<String, Object> session) {this.session = session;}public List<Magazine> getMagazineList() {return magazineList;}public void setMagazineList(List<Magazine> magazineList) {this.magazineList = magazineList;}}

Magazine.java

package com.uikoo9.model;public class Magazine {private String name;private double price;public Magazine(String name, double price) {this.name = name;this.price = price;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}}

ognlSuccess.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>jsp template</title></head><body><hr/>所有的ID:<s:property value="#parameters.id"/><br/>第一个ID:<s:property value="#parameters.id[0]"/><br/>request中取属性:<s:property value="#request.account"/><br/>session中取属性:<s:property value="#session.account"/><br/>application中取属性:<s:property value="#application.account"/><br/>attr中取属性:<s:property value="#attr.account"/><br/><hr/>价格大于18元的杂志共有<s:property value="magazineList.{?#this.price>18}.size()"/>本,分别是:<br/><s:iterator value="magazineList.{?#this.price>18}"><s:property value="name"/> - ¥<s:property value="price"/><br/></s:iterator><hr/>名称包含“时代”二字的杂志共有<s:property value="magazineList.{?#this.name.contains('时代')}.size()"/>本,分别是:<br/><s:iterator value="magazineList.{?#this.name.contains('时代')}"><s:property value="name"/> - ¥<s:property value="price"/><br/></s:iterator><hr/>“足球之夜”的价格为¥<s:property value="magazineList.{?#this.name.contains('足球之夜')}[0].price"/></body></html>

访问:http://localhost:8080/demo_struts2_08/ognl.action?id=1&id=2&id=3

18.2.3 %显式声明OGNL表达式

<!-- value中当作普通字符串处理 --><s:label value="#request.account"></s:label><!-- value当作OGNL处理 --><s:label value="%{#request.account}"></s:label>

18.2.4 $在资源文件中引用OGNL表达式

$用在资源国际化文件中或者struts配置文件中使用OGNL表达式


18.3 控制标签

18.3.1 if,elseif,else标签控制流程

类似于Java中的if,esle if,else

18.3.2 append标签连接多个list

<s:append id="myList"><s:param value="%{list1}"></s:param><s:param value="%{list2}"></s:param></s:append>

18.3.3 generator标签将字符转化为list

相当于Java中的split

<s:generator separator="," val="%{'李宁,安踏,双星,阿迪,耐克'}"></s:generator>

18.3.4 iterator标签遍历集合

18.3.5 merge标签取集合的并集

与append,不过append是取list1的所有元素然后加list2的所有元素,而merge是间隔的

18.3.6 subset标签过滤集合元素

<s:subset source="list" decider="decider"></s:subset>

对应的Action为:

package com.uikoo9.action;import java.util.ArrayList;import java.util.List;import org.apache.struts2.util.SubsetIteratorFilter;public class SubsetAction {@SuppressWarnings({ "serial", "unused" })private List<String> list = new ArrayList<String>(){{add("Machael");add("Scorfield");add("Other");}};@SuppressWarnings("unused")private SubsetIteratorFilter.Decider decider = new SubsetIteratorFilter.Decider() {public boolean decide(Object obj) throws Exception {if(obj instanceof String){if(obj.equals("Other")){return false;}else {return true;}}return false;}};public String execute(){return "sucess";}}


18.4 数据标签

18.4.1 action标签包含Action页面

相当于jsp中的include

<s:action name="login" executeResult="true" ignoreContextParams="false"></s:action>

18.4.2 bean标签引用Java Bean

<s:bean name="com.uikoo9.model.Magazine"><!-- 相当于setter --><s:param name="name" value="%{'nihao'}"></s:param><!-- 相当于getter --><s:property value="name"/></s:bean>

18.4.3 date标签输出日期

<s:bean name="java.util.Date" id="date"><s:param name="time" value="%{#date.time  -  70*24*60*60*1000}"></s:param></s:bean><s:date name="date" format="yyy/mm-dd hh:mm:ss"/><br/><s:date name="date"/><br/><s:date name="date" nice="true" /><br/> 

18.4.4 i18n,text标签声明资源国际化

<s:i18n name="otherResources"><s:text name="hello.world"></s:text></s:i18n>

18.4.5 include标签包含jsp页面

<s:include value="/login.jsp"></s:include>

18.4.6 param标签传递参数

18.4.7 set标签设置变量值

<s:set name="name" value="%{'hello'}"></s:set><s:property value="name"/>

18.4.8 propery便签输出变量值


18.5 表单UI标签

18.5.1 form标签输出表单

18.5.2 textfield,textarea,file,checkbox,radio标签

inputTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>jsp template</title></head><body><s:form action="login"><s:textfield name="textfield" label="文本框" required="true" tooltip="这是一个文本框"></s:textfield><s:password name="password" label="密码域" tooltip="这是密码域"></s:password><s:textarea name="textarea" label="文本域" tooltip="这是文本域"></s:textarea><s:file name="file" label="文件域" tooltip="这是文件域"></s:file><s:radio list="%{#{'male':'男', 'female':'女' }}" name="sex" label="单选框" tooltip="这是单选框"></s:radio><s:checkbox name="hobby" label="是否精通" value="true"></s:checkbox><s:submit value="提交" method="logout" align="center"></s:submit></s:form></body></html>

18.5.3 select,autocomplete标签下拉框

autocompleteTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib prefix="sx" uri="/struts-dojo-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><%List<String> list = new ArrayList<String>();list.add("北京");list.add("天津");list.add("上海");list.add("广州");list.add("山西");list.add("大同");list.add("太原");list.add("吕梁");request.setAttribute("list", list);%><s:form action="login"><s:select name="s1" list="%{#request.list}" label="select"></s:select><sx:autocompleter name="s2" list="%{#request.list}" label="auto"></sx:autocompleter></s:form></body></html>

上面代码的注意事项见:http://blog.csdn.net/moliqin/article/details/4909750

18.5.4 使用动态数据的autocomplete标签

autocompleteAjaxTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib prefix="sx" uri="/struts-dojo-tags"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><s:url id="theurl" value="/autocompleteAjaxData.jsp"></s:url>请选择国家:<sx:autocompleter name="country" href="%{theurl}"loadOnTextChange="true"loadMinimumCount="0"autoComplete="false"showDownArrow="true"indicator="indicator"></sx:autocompleter><img id="indicator" src="loading.gif"></body></html>

autocompleteAjaxData.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%out.clear();request.setCharacterEncoding("UTF-8");response.setHeader("Pragma", "no-cache");response.setHeader("Cache-Control", "no-cache");response.setDateHeader("Expires", 0);String[] countries = {"afdfjsl","fdlkjsa","erwq","dfas","xvx","erqsdavc","dsfaewtgsa","ewfdsfsa","china","america","fuck"};String country = request.getParameter("country");if(country == null){country = "";}StringBuffer buffer = new StringBuffer();for(int i=0; i<countries.length; i++){if(countries[i].toLowerCase().startsWith(country.toLowerCase())){if(buffer.length() != 0)buffer.append(",");buffer.append("['" + countries[i] + "']");}}//为了显示loading图标Thread.sleep(1000);//为了转换为json格式out.print("[" + buffer +"]");%>

18.5.5 checkboxlist标签多选框组

checkboxlistTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><%List<String> list = new ArrayList<String>();list.add("北京");list.add("天津");list.add("上海");list.add("广州");list.add("山西");list.add("大同");list.add("太原");list.add("吕梁");request.setAttribute("list", list);%><s:form action="ognl"><s:checkboxlist name="alist" list="%{#request.list}" label="a list:"></s:checkboxlist></s:form></body></html>

CheckboxlistAction.java

package com.uikoo9.action;import java.util.ArrayList;import java.util.List;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;@Results(value={@Result(name="success", location="/checkboxlistTag.jsp")})public class CheckboxlistAction {private List<String> alist = new ArrayList<String>();public String execute(){alist.add("北京");alist.add("上海");return "success";}}

18.5.6 combox标签复合框

一个输入框和一个下拉框的组合

18.5.7 datetimepicker标签日期选择器

<sx:datetimepicker name="date" displayFormat="yyyy-mm-dd" label="请选择日期"></sx:datetimepicker>

18.5.8 doubleselect标签联动选择框

doubleselectTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib prefix="sx" uri="/struts-dojo-tags"%><%List<String> list = new ArrayList<String>();list.add("北京");list.add("上海");list.add("河北");list.add("河南");list.add("山东");list.add("黑龙江");request.setAttribute("list", list);Map<String, List<String>> map = new HashMap<String, List<String>>();List<String> alist = new ArrayList<String>();alist.add("东城区");alist.add("西城区");alist.add("海淀区");alist.add("昌平区");map.put("北京", alist);List<String> blist = new ArrayList<String>();blist.add("青岛");blist.add("济南");blist.add("潍坊");blist.add("烟台");map.put("山东", blist);request.setAttribute("map", map);%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><s:form action="ognl"><s:doubleselect name="demo" list="%{#request.list}"doubleName="demo2" doubleList="%{#request.map.get(top)}"label="请选择省市:" ></s:doubleselect></s:form></body></html>

18.5.9 optiontransferselect标签

optiontransferselectTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib prefix="sx" uri="/struts-dojo-tags"%><%List<String> alist = new ArrayList<String>();alist.add("北京");alist.add("上海");alist.add("河北");alist.add("河南");alist.add("山东");alist.add("黑龙江");request.setAttribute("alist", alist);List<String> blist = new ArrayList<String>();blist.add("山西");blist.add("陕西");blist.add("内蒙古");blist.add("云南");blist.add("香港");blist.add("澳门");request.setAttribute("blist", blist);%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><s:form action="ognl"><s:optiontransferselect name="demo" list="%{#request.alist}"doubleName="demo2" doubleList="%{#request.blist}"leftDownLabel="向下" leftUpLabel="向上" leftTitle="已选中的省份"rightDownLabel="向下" rightUpLabel="向上" rightTitle="未选中的省份"headerKey="" headerValue="---请选择省份---"></s:optiontransferselect></s:form></body></html>

18.5.10 optgroup标签选项组

optgroupTag.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%@ taglib prefix="sx" uri="/struts-dojo-tags"%><%request.setAttribute("cityList", new ArrayList<String>(){{add("北京");add("上海");add("天津");add("重庆");}});Map map = new HashMap();map.put("山东", new HashMap(){{put("济南","济南");put("青岛","青岛");put("烟台","烟台");put("淄博","淄博");put("潍坊","潍坊");}});map.put("河北", new HashMap(){{put("石家庄","石家庄");put("唐山","唐山");put("廊坊","廊坊");put("邯郸","邯郸");}});request.setAttribute("map", map);%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>autocomplete</title><sx:head/></head><body><s:form action="ognl"><s:select name="city" list="%{#request.cityList}" label="请选择城市"><s:iterator value="%{#request.map}"><s:optgroup label="%{key}" list="%{value}"></s:optgroup></s:iterator></s:select></s:form></body></html>


18.6 非表单UI标签

18.6.1 debug标签输出调试信息

<s:debug></s:debug>

18.6.2 fielderror,actionerror,actionmessage标签错误信息

errorInput.jsp

<%@ page language="java" import="java.util.*"%><%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%>FieldErrors:<div style="color:red; font-weight:bold;"><s:fielderror></s:fielderror></div>ActionErrors:<div style="color:red; font-weight:bold;"><s:actionerror/></div>ActionMessages:<div style="color:green; font-weight:bold;"><s:actionmessage/></div><s:form action="error" method="get"><s:label label="Error,Message,FieldError演示"></s:label><s:submit value="执行execute()"></s:submit><s:submit value="执行fieldError()" method="fieldError"></s:submit><s:submit value="执行error()" method="error"></s:submit><s:submit value="执行message()" method="message"></s:submit></s:form>

ErrorAction.java

package com.uikoo9.action;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")@Results(value={@Result(name="input", location="/errorInput.jsp")})public class ErrorAction extends ActionSupport {@Overridepublic String execute() throws Exception {return "input";}public String error(){this.addActionError("执行error()方法,抛出了第一个error消息。");this.addActionError("执行error()方法,抛出了第二个error消息。");return "input";}public String message(){this.addActionMessage("执行message()方法,抛出第一个message消息。");this.addActionMessage("执行message()方法,抛出第二个message消息。");return "input";}public String fieldError(){this.addFieldError("username", "请填写用户名。");this.addFieldError("password", "密码不能为空");return "input";}}

-----------------------------------------以内容暂时略去

18.6.3 div,sbmit,a标签实现无刷新获取数据

18.6.4 无刷新实现登录,注销

18.6.5 tabbedPanel标签页

18.6.6 tree标签输出树

18.6.7 使用tree显示文件结构

18.6.8 使用tree动态加载数据


18.7 本章小结






原创粉丝点击