- 浏览: 519205 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
6.8 select 标签
以下代码 都是基于 6.3
select 标签用于生成一个下拉列表框,必须指定一个 list 属性,list 可以是集合,也可以是 map
常用属性:
● listKey
: 指定集合元素中的某个属性(例如集合元素为 Person 实例,指定 Person 实例的 name 属性) 作为复选框的 value 。如果是 map ,则可以使用 key 和 value 分别代表 Map 对象的 key 和 value 作为复选框的 value
● listValue : 指定集合元素的某个属性,作为复选框的标签。如果是 map ,则可以使用 key 和 value 分别代表 Map 对象的 key 和 value 作为复选框标签
● multiple : 设置该列表框是否允许多选
s-select.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:select生成下拉选择框</title> <s:head/> </head> <body> <h3>使用s:select生成下拉选择框</h3> <s:form action="selectAction" method="post" theme="css_xhtml"> <!-- 使用简单集合来生成下拉选择框 --> <s:select name="a" label="请选择您喜欢的图书" labelposition="top" multiple="true" list="{'Struts 2权威指南','轻量级Java EE企业应用实战', 'JavaScript: The Definitive Guide'}"/> <!-- 使用简单Map对象来生成下拉选择框 --> <s:select name="b" label="请选择您想选择出版日期" labelposition="top" list="#{'Struts 2权威指南':'2007年10月','轻量级Java EE企业应用实战':'2007月4月', '疯狂Ajax讲义':'2007年6月'}" listKey="key" listValue="value"/> <!-- 创建一个JavaBean实例 --> <s:bean name="js.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来生成下拉选择框 --> <s:select name="b" label="请选择您喜欢的图书" labelposition="top" multiple="true" list="#bs.books" listKey="author" listValue="name"/> <hr/> <s:submit align="left"></s:submit> <br/> <table border="1"> <tr> <td><s:select name="c" list="#request.list"></s:select></td> <td><s:select name="d" list="#request.map" listValue="value" listKey="key"></s:select></td> </tr> </table> </s:form> </body> </html>
SelectAction
package js; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class SelectAction extends ActionSupport { private String a = ""; private String[] b; private String c = ""; private String d = ""; private List<String> list = new ArrayList<String>(); private Map<String, String> map = new HashMap<String, String>(); public String execute() throws Exception { list.add("啊"); list.add("的的"); list.add("才"); list.add("不"); map.put("a", "啊"); map.put("b", "擦擦"); map.put("c", "爸爸"); map.put("d", "迭代"); System.out.println("a : " + a); if (b != null) { System.out.println("b : " + b.length); for(String t : b){ System.out.println(t); } } System.out.println("c : " + c); System.out.println("d : " + d); return SUCCESS; } public String getA() { return a; } public void setA(String a) { this.a = a; } public String[] getB() { return b; } public void setB(String[] b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public String getD() { return d; } public void setD(String d) { this.d = d; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } }
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <action name="selectAction" class="js.SelectAction"> <result name="success">/09/s-select.jsp</result> </action> <action name=""> <result>.</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/selectAction.action');" cssStyle="cursor: hand;">s-select.jsp</s:a>
BookService
package js; public class BookService { public Book[] getBooks() { return new Book[]{ new Book("疯狂Java讲义","李刚"), new Book("Struts 2权威指南","李刚"), new Book("轻量级Java EE企业应用实战","李刚"), new Book("疯狂Ajax讲义","李刚") }; } }
Book
package js; public class Book { private String name; private String author; public Book() { } public Book(String name, String author) { this.name = name; this.author = author; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setAuthor(String author) { this.author = author; } public String getAuthor() { return this.author; } }
6.9 radio 标签
以下代码 都是基于 6.3
js.BookService.java 之前例子已存在
s-radio.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:radio生成多个单选框</title> <s:head/> </head> <body> <s:form action="radioAction" method="post" theme="css_xhtml"> <h3>使用s:radio生成多个单选框</h3> <!-- 使用简单集合来生成多个单选框 --> <s:radio name="a" label="请选择您喜欢的图书" labelposition="top" list="{'Struts 2权威指南','轻量级Java EE企业应用实战','疯狂Ajax讲义'}"/> <!-- 使用简单Map对象来生成多个单选框 --> <s:radio name="b" label="请选择您想选择出版日期" labelposition="top" list="#{'Struts 2权威指南':'2007年10月','轻量级Java EE企业应用实战':'2007月4月' , '疯狂Ajax讲义':'2007年6月'}" listKey="key" listValue="value"/> <!-- 创建一个JavaBean实例 --> <s:bean name="js.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来生成多个单选框 --> <s:radio name="c" label="请选择您喜欢的图书" labelposition="top" list="#bs.books" listKey="author" listValue="name"/> <hr/> <s:submit align="left"></s:submit> <br/> <table border="1" bgcolor="red"> <tr> <td> <s:radio list="#request.list" name="d"></s:radio> </td> <td> <s:radio list="#request.map" name="e" listKey="key" listValue="value"></s:radio> </td> </tr> <tr> <td> <input type="radio" name="f" value="aradio">选1</input> <input type="radio" name="f" value="bradio">选2</input> </td> </tr> </table> </s:form> </body> </html>
RadioAction
package js; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class RadioAction extends ActionSupport { private String a = ""; private String b = ""; private String c = ""; private String d = ""; private String e = ""; private String f = ""; private List<String> list = new ArrayList<String>(); private Map<String, String> map = new HashMap<String, String>(); public String execute() throws Exception { list.add("啊"); list.add("的的"); list.add("才"); list.add("不"); map.put("a", "啊"); map.put("b", "擦擦"); map.put("c", "爸爸"); map.put("d", "迭代"); System.out.println("a : " + a); System.out.println("b : " + b); System.out.println("c : " + c); System.out.println("d : " + d); System.out.println("e : " + e); System.out.println("f : " + f); return SUCCESS; } public String getA() { return a;} public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c;} public String getD() { return d; } public void setD(String d) { this.d = d; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public String getE() { return e; } public void setE(String e) { this.e = e; } public String getF() { return f; } public void setF(String f) { this.f = f; } }
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <action name="radioAction" class="js.RadioAction"> <result name="success">/09/s-radio.jsp</result> </action> <action name=""> <result>.</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/radioAction.action');" cssStyle="cursor: hand;">s-radio.jsp</s:a>
6.10 optgroup 标签
以下代码 都是基于 6.3
optgroup 用于生成一个下拉框的选项组,因此,必须放在 <s:select .../> 中使用。
s-optgroup.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:optgroup生成下拉选择框的选项组</title> <s:head/> </head> <body> <h3>使用s:optgroup生成下拉选择框的选项组</h3> <s:form action="optgroupAction" method="post" theme="css_xhtml"> <!-- 直接使用Map为列表框生成选项 --> <s:select label="选择您喜欢的图书" name="book" size="7" list="#{'Struts 2权威指南':'李刚','轻量级Java EE企业应用实战':'李刚','疯狂Ajax讲义':'李刚'}" listKey="value" listValue="key"> <!-- 使用Map对象来生成选择框的选项组 --> <s:optgroup label="Rod Johnson" list="#{'Expert One-on-One J2EE Design and Development':'Johnson'}" listKey="value" listValue="key"/> <s:optgroup label="David Flanagan" list="#{'JavaScript: The Definitive Guide':'David'}" listKey="value" listValue="key"/> </s:select> <hr/> <s:submit align="left"></s:submit> <br/> <table border="1" > <tr> <td> <s:select name="book1" list="#request.map" listKey="key" listValue="value"> <s:optgroup list="#request.map1" listKey="key" listValue="value" label="test"></s:optgroup> </s:select> </td> <td> <s:select name="book2" list="#request.list" > <s:optgroup list="#request.map1" listKey="key" listValue="value" label="test"></s:optgroup> </s:select> </td> </tr> </table> </s:form> </body> </html>
OptgroupAction
package js; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class OptgroupAction extends ActionSupport { private String book = ""; private String book1 = ""; private String book2 = ""; private Map<String, String> map = new HashMap<String, String>(); private Map<String, String> map1 = new HashMap<String, String>(); private List<String> list = new ArrayList<String>(); private List<String> list1 = new ArrayList<String>(); public String execute() throws Exception { System.out.println("book : " + book); System.out.println("book1 : " + book1); System.out.println("book2 : " + book2); map.put("a", "暗暗");map.put("b", "拜拜");map.put("c", "擦擦");map.put("d", "迭代"); map1.put("a1", "暗暗1");map1.put("b1", "拜拜1");map1.put("c1", "擦擦1");map1.put("d1", "迭代1"); list.add("啦");list.add("啦隧道发生地方");list.add("啦发生的方式");list.add("啦迭代");list.add("啦22");list.add("啦1"); list1.add("a");list1.add("b");list1.add("c");list1.add("d");list1.add("e"); return SUCCESS; } public String getBook() { return book; } public void setBook(String book) { this.book = book; } public String getBook1() { return book1; } public void setBook1(String book1) { this.book1 = book1; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } public Map<String, String> getMap1() { return map1; } public void setMap1(Map<String, String> map1) { this.map1 = map1; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public List<String> getList1() { return list1; } public void setList1(List<String> list1) { this.list1 = list1; } public String getBook2() { return book2; } public void setBook2(String book2) { this.book2 = book2; } }
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <action name="optgroupAction" class="js.OptgroupAction"> <result name="success">/09/s-optgroup.jsp</result> </action> <action name=""> <result>.</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/optgroupAction.action');" cssStyle="cursor: hand;">s-optgroup.jsp</s:a>
optgroup
标签,貌似只能用 map 不能用 list
6.11 token 标签
以下代码 都是基于 6.3
用于防止多次提交表单的标签。如果需要该标签起作用,则应该在 Struts 2 的配置文件中启动 TokenInterceptor 拦截器或 TokenSessionStoreInterceptor 拦截器
实现原理: 在表单中增加一个隐藏域,每次加载该页面时,该隐藏域的值都不相同。 而 TokenInterceptor 拦截器则拦截所有用户请求,如果 2 次请求该 token 对应隐藏域的值相同(前一次提交时 token 隐藏域的值保存在 session 里 ),则阻止表单提交
注意 : 默认情况下,token 标签生成的隐藏域的 name 为 struts.token 。因此,不要在表单中另外再定义一个名为 struts.token 的表单域
s-token.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:token防止重复提交</title> </head> <body> <h3>使用s:token防止重复提交</h3> <s:form action="pro"> <!-- 普通表单域 --> <s:textfield name="book" key="book"/> <!-- 用于防刷新的token --> <s:token/> <s:submit value="提交"/> </s:form> </body> </html>
ProAction
package js; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; public class ProAction implements Action { private String book; public void setBook(String book) { this.book = book; } public String getBook() { return this.book; } // 处理用户请求,保存用户参数,并返回SUCCESS public String execute() throws Exception { ActionContext ctx = ActionContext.getContext(); ctx.put("book", getBook()); return SUCCESS; } }
refresh.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>防刷新测试</title> </head> <body> 您的请求已被处理!请不要刷新页面 </body> </html>
show.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>防刷新测试</title> </head> <body> 用户正常提交,提交的书名为:${requestScope.book} </body> </html>
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <!-- 定义名为pro的Action,其实现类为lee.ProAction --> <action name="pro" class="js.ProAction"> <!-- 使用系统默认的拦截器栈 --> <interceptor-ref name="defaultStack"/> <!-- 使用防刷新的token拦截器 --> <interceptor-ref name="token"/> <!-- 定义重复提交转向的视图,该逻辑视图名必须是invalid.token --> <result name="invalid.token">/09/refresh.jsp</result> <!-- 如果处理结果返回success,对应/show.jsp视图资源 --> <result name="success">/09/show.jsp</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/s-token.jsp');" cssStyle="cursor: hand;">s-token.jsp</s:a>
messageResource_en_US.properties
book=Book Name
messageResource_zh_CN.properties 或 messageResource_ja_JP.properties
book=书名
HTML
<input type="hidden" name="struts.token.name" value="struts.token" /> <input type="hidden" name="struts.token" value="2OHZFTNO4QPM3A58IE7TGCZEUMQWRRKY" />
6.12 updownselect 标签
以下代码 都是基于 6.3
用法非常类似于 select 标签,区别是该标签生成的列表框可以上下移动。
支持 list
listKey
listValue
,还支持如下属性:
● allowMoveUp
: 是否显示 上移 按钮。 默认 true
● allowMoveDown
: 是否显示 下移 按钮。 默认 true
● allowSelectAll
: 是否显示 全选 按钮,默认 true
● moveUpLabel
: 设置 上移 按钮的文本 ,默认 ˆ
● moveDownLabel
: 设置 下移 按钮的文本 默认 ˇ
● selectAllLabel
: 设置 全选 按钮的文本 默认 *
js.BookService.java 在之前例子中已有
s-updownselect.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:updownselect生成可上下移动选项的下拉选择框</title> <s:head/> </head> <body> <h3>使用s:updownselect生成可上下移动选项的下拉选择框</h3> <s:form action="updownselectAction" method="post" theme="css_xhtml"> <!-- 使用简单集合来生成可上下移动选项的下拉选择框 --> <s:updownselect name="a" label="请选择您喜欢的图书" labelposition="top" moveUpLabel="向上移动" list="{'Struts 2权威指南' , '轻量级Java EE企业应用实战','疯狂Ajax讲义'}"/> <!-- 使用简单Map对象来生成可上下移动选项的下拉选择框 且使用emptyOption="true"增加一个空选项--> <s:updownselect name="b" label="请选择您想选择出版日期" labelposition="top" moveDownLabel="向下移动" list="#{'Struts 2权威指南':'2007年10月','轻量级Java EE企业应用实战':'2007月4月','疯狂Ajax讲义':'2007年6月'}" listKey="key" emptyOption="true" listValue="value"/> <s:bean name="js.BookService" id="bs"/> <!-- 使用集合里放多个JavaBean实例来可上下移动选项的生成下拉选择框 --> <s:updownselect name="c" label="请选择您喜欢的图书的作者" labelposition="top" selectAllLabel="全部选择" multiple="true" list="#bs.books" listKey="author" listValue="name"/> <hr/><s:submit align="left"></s:submit><hr/> <table border="1"> <tr> <td><s:updownselect name="d" list="#request.list" selectAllLabel="全部" moveDownLabel="下" moveUpLabel="上" /></td> <td><s:updownselect name="e" list="#request.map" selectAllLabel="全部" moveDownLabel="下" moveUpLabel="上" listKey="key" listValue="value"/></td> </tr> </table> </s:form> </body> </html>
UpdownselectAction
package js; import java.util.*; import com.opensymphony.xwork2.ActionSupport; public class UpdownselectAction extends ActionSupport { private String a = ""; private String b = ""; private String c = ""; private String d = ""; private String e = ""; private List<String> list = new ArrayList<String>(); private Map<String, String> map = new HashMap<String, String>(); public String execute() throws Exception { System.out.println("a : " + a); System.out.println("b : " + b); System.out.println("c : " + c); System.out.println("d : " + d); System.out.println("e : " + e); list.add("a啊");list.add("a不");list.add("a才");list.add("a的");list.add("a额"); map.put("1", "a");map.put("2", "b");map.put("3", "c");map.put("4", "d");map.put("5", "e"); return SUCCESS; } public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } public String getC() { return c; } public void setC(String c) { this.c = c; } public String getD() { return d; } public void setD(String d) { this.d = d; } public String getE() { return e; } public void setE(String e) { this.e = e; } public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } }
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <action name="updownselectAction" class="js.UpdownselectAction"> <result name="success">/09/s-updownselect.jsp</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/updownselectAction.action');" cssStyle="cursor: hand;">s-updownselect.jsp</s:a>
bug?
提交表单的时候 貌似会把所有选项都提交
七、 非表单标签
非表单标签主要用于页面中生成一些非表单的可视化元素,如 tab 页面、输出 HTML 树形结构等。当然也包含在页面显示 Action 里封装的信息。
非表单标签主要有如下几个:
● actionerror
: Action 的 getActionError() 返回不为 null ,则输出该信息
● actionmessage
: Action 的 getActionMessage() 返回不为 null ,则输出该信息
● component
: 使用次标签可以生成一个自定义组件。
● fielderror
: 如果 Action 实例存在表单域的类型转换错误、校验错误,该标签则负责输出这些错误提示
fielderror 在 类型转换、 数据校验部分有介绍,此处不说了
7.1 actionerror 和 actionmessage 标签
以下代码 都是基于 6.3
这2个标签用法完全一样,作用也几乎一样。 actionerror 输出 action 的 getActionError() ,actionmessage 输出 action 的 getActionmessage()
DemoAction.java
package js; import com.opensymphony.xwork2.ActionSupport; public class DemoAction extends ActionSupport { public String execute() { // 添加两条Error信息 addActionError("第一条错误消息!"); addActionError("第二条错误消息!"); // 添加两条普通信息 addActionMessage("第一条普通消息!"); addActionMessage("第二条普通消息!"); return SUCCESS; } }
s-msg.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:actionerror和s:actionmessage标签生成错误提示</title> <s:head/> </head> <body> <s:action name="demo" executeResult="true"/> </body> </html>
executeResult="true" 表示之间将 demoAction 的处理结果包含到本页面中
demo.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> </head> <body> <s:actionerror/> <s:actionmessage /> </body> </html>
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.2.dtd"> <struts> <constant name="struts.custom.i18n.resources" value="messageResource"/> <constant name="struts.i18n.encoding" value="GBK"/> <package name="js" extends="struts-default" namespace="/09"> <!-- 定义一个简单的Action --> <action name="demo" class="js.DemoAction"> <result>/09/demo.jsp</result> </action> </package> </struts>
<s:a href="" onclick="newWin('09/s-msg.jsp');" cssStyle="cursor: hand;">s-msg.jsp</s:a>
7.2 component 标签
以下代码 都是基于 6.3
component
标签可用于创建自定义视图组件。
属性:
● theme
: 自定义组件所使用的主题,默认 xhtml 主题
● templateDir
: 自定义组件的主题目录,默认使用系统的主题目录,即 template 目录
● template
: 指定自定义组件所使用的模版
除此之外,还可以在 component
标签内使用 param
子标签,子标签表示向该标签模版中传入额外的参数。如果希望在模版中取得该参数,则:
$parameters.paramname
或者 $parameters['paramname']
提示 :
自定义模版可以采用 FreeMarker、JSP、Velocity 三种技术来书写
s-component.jsp
<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>使用s:component标签</title> </head> <body> <h3>使用s:component标签</h3> 使用默认主题(xhtml),默认主题目录(template)<br/> 使用mytemplate.jsp作为视图组件 <s:component template="mytemplate.jsp"> <s:param name="list1" value="{'Struts2权威指南', '轻量级J2EE企业应用实战','基于J2EE的Ajax宝典'}"/> </s:component> <hr/> 使用自定义主题,自定义主题目录<br/> 使用myAnotherTemplate.jsp作为视图组件 <s:component templateDir="myTemplateDir" theme="myTheme" template="myAnotherTemplate.jsp" > <s:param name="list" value="{'Struts 2权威指南', '轻量级Java EE企业应用实战' , '疯狂Ajax讲义'}" /> </s:component> </body> </html>
/WebContent/template/xhtml/mytemplate.jsp
template 目录与 WEB-INF 同级
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <div style="background-color:#eeeeee;"> <b>JSP自定义模板<br> 请选择您喜欢的图书<br></b> <s:select list="parameters.list1"/> </div>
/WebContent/myTemplateDir/myTheme/myAnotherTemplate.jsp
myTemplateDir 目录与 WEB-INF 同级
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <div style="background-color:#bbbbbb;"> JSP自定义模板<br> 请选择您喜欢的图书<br> <select> <s:iterator value="%{top.parameters.list}"> <option><s:property/></option> </s:iterator> </select> </div>
注意 : Struts 2.0 即使自行定义了 templateDir 、 theme 属性,一样可以在自定义视图模版中使用 select 等UI,struts 2.1 中就不行
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7401) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17435.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24355.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2398四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2486一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2907六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1628四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2021一、 理解拦截器 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1646六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1972四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2031三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1363一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2260二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1306一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1795三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1984二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2087一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1216六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1721五、 内建校验器 S ... -
struts2 输入校验 (二)
2010-10-28 11:01 2385二、 基本输入校验 MVC ...
相关推荐
Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...
"Struts2标签库详解" Struts2标签库是Struts2框架中的一个重要组件,它提供了一系列的标签,帮助开发者快速构建Web应用程序。在Struts2标签库中,标签可以分为UI标签和非UI标签两大类。UI标签用于生成HTML控件,如...
第五章:struts2标签库
Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:Bean Tags、HTML Tags、Logic Tags、Nested Tags 和 Tiles Tags。下面将对前三个标签库中的标签进行详细的介绍。 Bean Tags Bean Tags...
有关、相关、类似这样的Struts 2标签库的详细介绍。
Struts2标签库的组成 Struts2框架的标签库可以分为以下三类: 用户界面标签(UI标签):主要用来生成HTML元素的标签。 表单标签:主要用于生成HTML页面的FORM元素,以及普通表单元素的标签。 非表单标签:主要用于生成...
Struts2标签库是Java开发Web应用程序时常用的一个强大工具,尤其在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。Struts2框架提供了丰富的自定义标签库,极大地简化了视图层的开发,使得开发者...
首先,Struts2标签库分为两大类:核心标签库和展示标签库。核心标签库提供了一组基础功能,如表单处理、控制流程、消息显示等,而展示标签库则包含更具体的UI元素,如数据展示、分页等。了解这些标签库的使用,可以...
Struts2标签库是开发Java Web应用程序的重要工具,它提供了丰富的UI组件和逻辑控制标签,大大简化了视图层的编码工作。这个“Struts2标签库详解(非常不错)”的资源应该包含了对Struts2所有标签的详细介绍,以及相关...
Struts 2 标签的使用注意事项 Struts 2 是一个基于MVC架构的...使用Struts 2标签需要注意配置Struts 2的核心Filter和导入Struts 2标签库。同时,Struts 2标签的用法非常广泛,包括表单标签、验证标签、数据标签等。
Struts2 标签库及国际化的使用案例 Struts2 框架提供了强大的标签库和国际化功能,本实验旨在掌握 Struts 2 标签库和国际化功能的使用,并实现用户注册页面的国际化显示。 一、Struts2 标签库 Struts2 框架提供了...
Struts2标签库是Java Web开发中的重要组成部分,它极大地简化了视图层的构建,提高了开发效率。Struts2框架提供了丰富的标签集合,这些标签主要用于JSP页面,帮助开发者处理常见任务,如数据展示、表单处理、逻辑...
尽管目前Struts1已逐渐被更新的版本如Struts2取代,但了解其标签库仍然有助于理解Web应用的历史发展和基础概念。 Struts1标签库主要分为四大类: 1. **Bean标签**:这类标签用于在JSP页面中管理JavaBean,包括创建...