原创:Struts2数据标签的解析

本文介绍了Struts2框架中的数据标签及其应用场景,包括bean标签创建JavaBean实例、set标签设置变量、url标签生成URL地址等,并提供了具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据标签主要用于提供各种数据访问相关的功能,比如显示一个Action里的属性,以及生成的国际化输出等。
Struts2数据标签主要分为以下几种:
property:用于生成输出某个值 值包:valueStack、StackContext和ActionContext中的值
bean:该标签用于创建一个JavaBean实例,如果指定了id属性,则可以将创建的Javabean实例存放入Stack Context中。
set:用于设置一个新变量,并将该新变量放入指定的范围内
url:用于生成一个URL地址
text:用于输出国际化信息
param:用于设置一个参数,通用用做bean标签 URL标签的子标签
date:用于输出一个日期
debug:用于在页面上生成一个连接,当点击链接时,可以看到ValueStack 和 Stack Context中的内容
include:用于在JSP页面中包含其他的jsp资源等
i18n:用于指定国际化资源文件的baseName
action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可以将该Action的处理结果包含到

本页面中
push:用于将某个值放入ValueStack的栈顶。

以下是部分标签的案例供学员参考:

Java代码 复制代码
  1. /**首先创建一个JavaBean供bean标签使用*/
  2. packageedu.bean;
  3. importjava.io.Serializable;
  4. publicclassAdminimplementsSerializable{
  5. /**
  6. *
  7. */
  8. privatestaticfinallongserialVersionUID=1L;
  9. privateintid;
  10. privateStringname;
  11. privateStringpass;
  12. publicAdmin(){
  13. }
  14. publicAdmin(intid,Stringname,Stringpass){
  15. this.id=id;
  16. this.pass=pass;
  17. this.name=name;
  18. }
  19. publicintgetId(){
  20. returnid;
  21. }
  22. publicvoidsetId(intid){
  23. this.id=id;
  24. }
  25. publicStringgetName(){
  26. returnname;
  27. }
  28. publicvoidsetName(Stringname){
  29. this.name=name;
  30. }
  31. publicStringgetPass(){
  32. returnpass;
  33. }
  34. publicvoidsetPass(Stringpass){
  35. this.pass=pass;
  36. }
  37. publicvoidstudy(){
  38. System.out.println("管理员正在学习管理的方式.....");
  39. }
  40. }
  41. /**以下是视图层中的案例原码供学员参考*/
  42. <body>
  43. <h1>
  44. 数据标签案例
  45. </h1>
  46. <!--bean用于创建一个JavaBean实例
  47. name属性:必填属性该属性指定要实例化的JavaBean的实现类。
  48. id属性:该属性是一个可选属性.如果指定了该属性,则该JavaBean实例会被存入StackContext中,从
  49. 而允许直接通过id属性来访问该JavaBean实例
  50. -->
  51. <s:beanname="edu.bean.Admin"id="p">
  52. <!--使用param标签为Java实例传入参数name是属性名称value是属性值-->
  53. <s:paramname="id"value="12"></s:param>
  54. <s:paramname="name"value="'redarmy'"></s:param>
  55. <s:paramname="pass"value="'123'"></s:param>
  56. <!--备注:在value属性值中我们使用了"''"既外层是""内层是''为什么呢?
  57. 其实暗藏玄机,如果没有加''那么它redarmy当成变量来取值,而不是看成字符串。
  58. 所以要想看成字符串必须加单引号,而对于整数无此要求
  59. -->
  60. </s:bean>
  61. <!--在使用bean标签的时候要获取p的实例加#前缀-->
  62. <s:setname="entity"value="#p"></s:set>
  63. <s:propertyvalue="#entity.name"/>
  64. <br/>
  65. <!--在这里你明白为什么加''吗?如果还是不明白请参考上面-->
  66. <s:setname="username"value="'redarmyChen'"scope="session"></s:set>
  67. <s:propertyvalue="#session['username']"/>
  68. <br/>
  69. <!--URL标签中的method方法指明的是Action中的处理方法-->
  70. <s:urlaction="./adminLogin.action"namespace="/"id="login">
  71. <s:paramname="name"value="'redarmy'"></s:param>
  72. <s:paramname="pass"value="'123'"></s:param>
  73. </s:url>
  74. <s:ahref="%{login}">用户登录</s:a>
  75. <br/>
  76. <!--用于输出日期的标签-->
  77. <%
  78. Datenowdt=newDate(300000000);
  79. //将nowdt存入到PageContext里的属性
  80. pageContext.setAttribute("nowdt",nowdt);
  81. %>
  82. <!--默认的格式:YYYY-MM-DDHH:mm:ss-->
  83. <s:datename="#attr.nowdt"/>
  84. <br/>
  85. <!--format:是一个可选属性如果指明该属性则就按照指明的格式输出-->
  86. <s:datename="#attr.nowdt"format="dd/MM/yyyy"/>
  87. <br/>
  88. <!--nice:是一个可选属性,true|false它用于指定是否输出指定日期和当前日期之间时差-->
  89. <br/>
  90. <s:datename="#attr.nowdt"nice="true"></s:date>
  91. <!--怎么输出国际化信息呢可以采用如下方式-->
  92. <s:propertyvalue="%{getText('helloworld')}"/>
  93. <s:textname="helloworld"></s:text>
  94. <!--生成一个debug的链接链接中显示ValueStackStackContext中的所有的值信息-->
  95. <s:debug></s:debug>
  96. </body>
  97. /**以下是struts.xml文件*/
  98. <?xmlversion="1.0"encoding="UTF-8"?>
  99. <!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.1//EN"
  100. "http://struts.apache.org/dtds/struts-2.1.dtd">
  101. <struts>
  102. <!--国际化资源文件的声明-->
  103. <constantname="struts.custom.i18n.resources"value="globalMessages"></constant>
  104. <packagename="sts"extends="struts-default"namespace="/">
  105. <!--全局的结果-->
  106. <global-results>
  107. <resultname="input">/admin/error.jsp</result>
  108. </global-results>
  109. <!--action处理-->
  110. <actionname="adminLogin"class="edu.saction.AdminAction"
  111. method="login">
  112. <result>/admin/main.jsp</result>
  113. </action>
  114. </package>
  115. </struts>
/**首先创建一个JavaBean 供bean标签使用*/ package edu.bean; import java.io.Serializable; public class Admin implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private int id; private String name; private String pass; public Admin() { } public Admin(int id, String name, String pass) { this.id = id; this.pass = pass; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public void study(){ System.out.println("管理员正在学习管理的方式....."); } } /**以下是视图层中的案例原码供学员参考*/ <body> <h1> 数据标签案例 </h1> <!--bean用于创建一个JavaBean实例 name属性:必填属性 该属性指定要实例化的JavaBean的实现类。 id属性:该属性是一个可选属性.如果指定了该属性,则该JavaBean实例会被存入Stack Context中,从 而允许直接通过id属性来访问该JavaBean实例 --> <s:bean name="edu.bean.Admin" id="p"> <!-- 使用param标签为Java实例传入参数 name是属性名称 value是属性值--> <s:param name="id" value="12"></s:param> <s:param name="name" value="'redarmy'"></s:param> <s:param name="pass" value="'123'"></s:param> <!--备注:在value属性值中我们使用了" ' ' " 既外层是""内层是'' 为什么呢? 其实暗藏玄机,如果没有加''那么它redarmy当成变量来取值,而不是看成字符串。 所以要想看成字符串必须加单引号,而对于整数无此要求 --> </s:bean> <!--在使用bean标签的时候 要获取p的实例加#前缀--> <s:set name="entity" value="#p"></s:set> <s:property value="#entity.name" /> <br /> <!--在这里你明白为什么加''吗?如果还是不明白请参考上面--> <s:set name="username" value="'redarmyChen'" scope="session"></s:set> <s:property value="#session['username']" /> <br /> <!-- URL标签中的method方法 指明的是Action中的处理方法 --> <s:url action="./adminLogin.action" namespace="/" id="login"> <s:param name="name" value="'redarmy'"></s:param> <s:param name="pass" value="'123'"></s:param> </s:url> <s:a href="%{login}">用户登录</s:a> <br /> <!-- 用于输出日期的标签 --> <% Date nowdt = new Date(300000000); //将nowdt存入到PageContext里的属性 pageContext.setAttribute("nowdt", nowdt); %> <!-- 默认的格式:YYYY-MM-DD HH:mm:ss --> <s:date name="#attr.nowdt" /> <br /> <!-- format:是一个可选属性 如果指明该属性 则就按照指明的格式输出 --> <s:date name="#attr.nowdt" format="dd/MM/yyyy" /> <br /> <!-- nice:是一个可选属性,true|false 它用于指定是否输出指定日期和当前日期之间时差--> <br /> <s:date name="#attr.nowdt" nice="true"></s:date> <!-- 怎么输出国际化信息呢 可以采用如下方式 --> <s:property value="%{getText('helloworld')}" /> <s:text name="helloworld"></s:text> <!--生成一个debug的链接 链接中显示ValueStack Stack Context中的所有的值信息--> <s:debug></s:debug> </body> /**以下是struts.xml文件*/ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 国际化资源文件的声明 --> <constant name="struts.custom.i18n.resources" value="globalMessages"></constant> <package name="sts" extends="struts-default" namespace="/"> <!-- 全局的结果 --> <global-results> <result name="input">/admin/error.jsp</result> </global-results> <!-- action处理 --> <action name="adminLogin" class="edu.saction.AdminAction" method="login"> <result>/admin/main.jsp</result> </action> </package> </struts>


/**以下是globalMessages_zh_CN.properties文件内容*/
helloworld=/u6B22/u8FCE.....


希望以上内容对学员学习struts2的数据标签有所帮助,以上内容属个人上课记录,如要转发请注明出处。愿你有所收获!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值