`

struts标签——bean

    博客分类:
  • java
 
阅读更多

bean:cookie

cookie最早是由Netscape公司提出来的,用来存储客户的少量状态信息。如果您对cookie的具体细节感兴趣可以查阅参考资料中的cookie spec。

bean:cookie标签取回请求中名称为name的cookie的值。如果没有指定multiple属性则依据刚取回的值创建一个Cookie类型的bean。如果指定了multiple属性则依据刚取回的值创建一个Cookie[]类型的数组。然后用id属性值将Cookie或Cookie[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。

下面的代码片段示例了如何使用bean:cookie标签读取名为JSESSIONID的cookie的值,并且使用了两种方式进行了输出:

<logic:present cookie="JSESSIONID">
 <bean:cookie id="jSession" name="JSESSIONID"/>
 <!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
 这个cookie的名称是<bean:write name="jSession" property="name"/>,
 值为<bean:write name="jSession" property="value"/>。<br/>
 <!-- JSP脚本通过scripting变量使用该值 -->
 <%
 String name = jSession.getName();
 String value = jSession.getValue();
 out.println("这个cookie的名称是"+name+",值为"+value+"。
 <br/>"); 
 %>
</logic:present>

bean:define

bean:define标签在toScope(如果没有指定值就使用page作用域)指定的作用域中创建一个新属性,同时创建一个scripting变量。我们可以通过id值使用它们。新创建的属性可以由其它标签使用,而新创建的scripting变量可以由JSP脚本使用。

我们可以使用三种方式为新创建的属性和scripting变量赋值:

  • 通过该标签的name、property和scope取回值,并且保持类型的一致性,除非取回的值为Java的原始类型,这时会使用适合的包装器类对这些值进行包装。
  • 通过该标签的value指定值,这时新创建的属性和scripting变量的类型为java.lang.String。
  • 通过在该标签的体中嵌入值,这时新创建的属性和scripting变量的类型为java.lang.String。

 

下面的代码片段示例了如何使用bean:define标签创建新属性values和新scripting变量values,它将listForm中persons的值取出来赋给values:

<bean:define id="values" name="listForm" property = "persons" 
 type="java.util.List"/> 

下面给出ListForm的代码片段以帮助您更好的理解,其中Person是一个只有id和name两个属性的简单bean:

public class ListForm extends ActionForm {
 private List<Person> persons = null;
 public List<Person> getPersons() {
 return persons;
 }
 public void setPersons(List<Person> persons) {
 this.persons = persons;
 }
 public void reset(ActionMapping mapping, 
 HttpServletRequest request) {
 persons = null;
 }
} 

下面的代码片段示例了logic:iterate标签如何使用bean:define标签创建的新属性values:

<logic:iterate id="person" name="values">
 <bean:write name="person" property="id"/><br/>
</logic:iterate>

下面的代码片段示例了JSP脚本如何使用bean:define标签创建的新scripting变量values:

<%
 Person p = new Person();
 for(int i=0;i<values.size();i++){
 p = (Person)values.get(i);
 out.println(p.getId());
 out.println("<br/>");
 }  
%>

bean:header

bean:header标签取回请求中名称为name的header的值。如果没有指定multiple属性则依据刚取回的值创建一个String类型的bean。如果指定了multiple属性则依据刚取回的值创建一个String[]类型的数组。然后用id属性值将String或String[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。

下面是我的浏览器发送的header的内容,这些内容和浏览器有关,因此您的浏览器发送的内容可能和下面列出的不同。不过这没有关系,因为要理解bean:header标签您只要对这些内容有一个大概的认识就足够了。

accept: */* 
accept-language: zh-cn 
accept-encoding: gzip, deflate 
user-agent: Mozilla/4.0 (compatible; MSIE 6.0; //应该在同一行
 Windows NT 5.1; SV1; .NET CLR 1.1.4322) 
host: localhost:8080 
connection: Keep-Alive 

下面的代码片段示例了如何使用bean:header标签读取名为User-Agent的header的值,并且使用了两种方式进行了输出:

<logic:present header="User-Agent">
 <!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
 您的浏览器是<bean:header id="userAgent" name="User-Agent"/>
 <bean:write name="userAgent"/>。<br/>
 <!-- JSP脚本通过scripting变量使用该值 -->
 <%
 out.println("您的浏览器是"+userAgent+"。<br/>"); 
 %>
</logic:present>

bean:include

bean:include标签对指定url(由forward、href或page确定)处的资源做一个请求,将响应数据作为一个String类型的bean绑定到page作用域,同时创建一个scripting变量。我们可以通过id值访问它们。

下面的代码片段示例了bean:include标签的用法,其中include.txt文件包含要include的内容,然后将这些内容输出:

<bean:include id="value" page="/include.txt"/>
<!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
<bean:write name="value"/><br/>
<!-- JSP脚本通过scripting变量使用该值 -->
<%
 out.println(value); 
%>

bean:message

bean:message标签用来从指定的locale中取回国际化的消息并输出,在这个过程中我们还可以传递五个以内的参数。message key可以通过key直接指定,也可以通过name和property间接的指定。

bean:message标签有两种指定message key的方式,一是通过key属性直接指定;二是通过name和property属性间接的指定,其中message key是在message resources文件中定义的。

我们可以在struts-config.xml文件中使用<message-resources>来设置message resources文件。

为了介绍该标签我使用了三个message resources文件,三个文件的名字分别为Resources.properties、Resources_en.properties和Resources_zh.properties。在struts-config.xml文件中的设置(这里不用设置三个,struts会依据locale自动找到对应的文件)如下:

<message-resources parameter="Resources" />

三个message resources文件中定义的message key为:

<!-- Resources.properties -->
resource=Resources.properties.
from=Resources.properties.
<!-- Resources_en.properties -->
from=Resources_en.properties.
<!-- Resources_zh.properties 
 因为文件的编码被限制为ISO8859所以要有汉字必须用jdk的native2ascii提前转换 
-->
from=Resources_zh.properties.

下面的代码片段示例了bean:message标签的用法:

<bean:message key="from"/><br/>
<bean:message key="resource"/><br/>
<html:link action="/locale?language=en">English</html:link>
<html:link action="/locale?language=zh">Chinese</html:link>

上面的代码中含有改变locale的两个html:link标签,要使它们工作您的struts-config.xml文件中必须含有下面定义的form和action:

<form-bean name="localeForm" 
 type="org.apache.struts.action.DynaActionForm">
 <form-property name="language" type="java.lang.String" />
 <form-property name="country" type="java.lang.String" />
 <!--action成功后要跳到那里-->
 <form-property name="page" type="java.lang.String" 
 initial="/message.jsp"/>
</form-bean>
 
<action path="/locale" type="org.apache.struts.actions.LocaleAction"
 name="localeForm" scope="request">
</action>

在不同的locale下我们得到了如下的两个结果:

在locale为zh时的结果:
Resources_zh.properties.
Resources.properties.
在locale为en时的结果: 
Resources_en.properties.
Resources.properties.

让我们来看一下在locale为zh时如何得到的是上面的结果。因为locale为zh所以<bean:message key="from"/><br/>先找Resources_zh.properties这个文件从中得到form键的值。而<bean:message key="resource"/><br/>也会先找Resources_zh.properties这个文件但这次没有找到resource键,这时Struts会到Resources.properties这个文件中找,很幸运这里找到了。如果还没有找到,或message resource文件不存在就会抛出异常。当locale为en时类似,您可以自己试试。

bean:page

bean:page标签将页上下文中的application、config、request、response 或 session取出,然后用id属性值将它们绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。

下面的代码片段示例了bean:page标签取出response,然后使用bean:write标签将response的characterEncoding和contentType属性输出:

<bean:page id="res" property="response"/>
<!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
<bean:write name="res" property="characterEncoding"/><br/>
<bean:write name="res" property="contentType"/><br/>
<!-- JSP脚本通过scripting变量使用该值 -->
<%
 String characterEncoding = res.getCharacterEncoding();
 String contentType = res.getContentType();
 out.println(characterEncoding+"<br/>"); 
 out.println(contentType+"<br/>"); 
%>

您可以用和上面类似的代码访问application、config、request 或 session中的任何一个对象。

bean:parameter

bean:parameter标签取回请求中的参数值。如果没有指定multiple属性则依据刚取回的值创建一个String类型的bean。如果指定了multiple属性则依据刚取回的值创建一个String[]类型的数组。然后用id属性值将String或String[]绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。

下面的两个代码片段使用相同的url传递参数,url的形式为http://127.0.0.1:8080/struts-demo/parameter.jsp?param=1&param=2&param=3。前面的代码片段中没有指定multiple属性,因此p是String类型而且仅仅读取了参数的第一个值。后面的代码片段中指定了multiple属性的值,因此ps是String[]类型的包含所有参数的值。

<bean:parameter id="p" name="param"/>
<bean:write name="p"/>
<bean:parameter id="ps" multiple="true" name="param"/>
<logic:iterate id="p" name="ps">
 <bean:write name="p"/><br/>
</logic:iterate>

bean:resource

bean:resource标签取回指定的web应用程序的资源,以InputStream或String的形式保存到page作用域中并且创建scripting变量。采用什么形式取决于标签的input属性,如果指定input则以InputStream的形式保存,如果没有指定input则以String的形式保存。

下面的两个代码片段示例了bean:resource标签,其中resource.txt是要使用的资源文件。前面的代码片段中没有指定input属性,因此以String的形式处理资源文件,bean:write标签输出资源文件的内容。后面的代码片段中指定了input属性的值,因此以InputStream的形式使用资源文件,两个bean:write标签分别输出InputStream对象的实例名(如java.io.ByteArrayInputStream@16dadf9)和类名(如class java.io.ByteArrayInputStream)。

<bean:resource id="str" name="/resource.txt"/>
<!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
<bean:write name="str"/><br/>
<!-- JSP脚本通过scripting变量使用该值 -->
<%
 out.println(str+"<br/>");
%>
<bean:resource id="is" input="true" name="/resource.txt"/>
<!-- 其它标签通过绑定到page作用域中的属性使用该值 -->
<bean:write name="is"/><br/>
<bean:write name="is" property="class"/>
<!-- JSP脚本通过scripting变量使用该值 -->
<%
 out.println(is+"<br/>");
 out.println(is.getClass()+"<br/>");
%>

bean:size

bean:size标签创建一个java.lang.Integer类型的bean,这个bean的值为该标签指定的Collection或Map中所含元素的个数。 这可以和logic:iterate标签配合使用,因为logic:iterate标签不能得到所叠代的集合的元素的个数,这有时候很不方便。

下面的代码片段示例了bean:size标签取出persons中还有元素的个数,其中listForm和persons的定义参见bean:define标签部分:

<logic:notEmpty name="listForm" property = "persons">  
 <bean:size id="size" name="listForm" property = "persons"/>
 <bean:write name="size"/>  
</logic:notEmpty> 

bean:struts

bean:struts标签取回Struts的内部对象formBean、forward或mapping的值,然后用id绑定到page作用域中(这种绑定是为了其它标签能够使用该值),并创建对应的scripting变量(这种变量是为了JSP脚本能够使用该值)。

下面的代码片段示例了bean:struts标签取出listForm对象,让我们先来看一下listForm的定义在读代码:

<!-- listForm的定义<form-bean name="listForm" 
 type="org.solo.struts.form.ListForm" /> -->
<bean:struts id="listFormBean" formBean="listForm"/>
name:<bean:write name="listFormBean" property="name"/><br/>
type:<bean:write name="listFormBean" property="type"/><br/>
dynamic:<bean:write name="listFormBean" property="dynamic"/><br/>

上面代码运行的结果为:

name:listForm 
type:org.solo.struts.form.ListForm
dynamic:false 

bean:write

bean:write标签将指定的bean的属性值写到当前的JspWriter中,并且可以对输出进行格式化。

下面的代码片段示例了bean:write标签输出User-Agent:

<logic:present header="User-Agent">
 <bean:header id="header" name="User-Agent"/>
 <bean:write name="header"/>
</logic:present>

下面的代码片段示例了bean:write标签格式化输出当前日期,其中now是在DataForm中定义的一个java.util.Date类型的域(值为new Date()),format.date.standard是在资源文件中的一个键(format.date.standard=yyyy-MM-dd):

<bean:define id="date" name="dataForm" property="now"/>
<br/><bean:write name="date"/>
<br/><bean:write name="date" format="MM/dd/yyyy"/>
<br/><bean:write name="date" formatKey="format.date.standard"/>

上面代码运行的结果为:

Sun Jun 04 17:04:05 CST 2006
06/04/2006
2006-06-04
分享到:
评论

相关推荐

    jsp使用自定义标签taglib分页系列——完整例子

    jsp使用自定义标签taglib分页系列——完整例子(其中struts控件和包我没有加入,需要自己加入)

    Struts2 in action中文版

    第三部分 构建视图——标签和结果 第6章 构建视图——标签 108 6.1 入门 108 6.1.1 ActionContext和OGNL 109 6.1.2 虚拟对象ValueStack 111 6.2 Struts 2标签概要 113 6.2.1 Struts 2标签API语法 113 6.2.2 使用OGNL...

    低清版 大型门户网站是这样炼成的.pdf

    第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 105 3.2.1 if/elseif/else标签详解 105 3.2.2 iterator标签详解 106 3.2.3 append标签详解 108 3.2.4 ...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    5.1 Struts标签的使用方法 59 5.2 表单标签的共同属性 60 5.3 form标签 62 5.4 textfield、password、hidden标签 63 5.5 submit标签 65 5.6 reset标签 65 5.7 label标签 66 5.8 head标签 66 5.9 textarea标签 66 ...

    从Java走向Java+EE+.rar

    9.4.1 如何使用Struts标签 127 9.4.2 HTML标签 128 9.4.3 Bean标签 134 9.4.4 Logic标签 136 9.4.5 Nested标签 137 9.5 小结 138 第10章 新一代的Struts 2 139 10.1 Struts 2框架的特点 140 10.2 ...

    java web 视频、电子书、源码(李兴华老师出版)

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;标签 ...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;标签 ...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;标签 ...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;标签 ...

    李兴华Java Web开发实战经典(高清版) Part2

    16.1、Struts标签库简介 16.2、Bean标签 16.2.1、&lt;bean:define&gt;标签 16.2.2、&lt;bean:size&gt;标签 16.2.3、资源访问标签 16.2.4、&lt;bean:write&gt;标签 16.2.5、&lt;bean:include&gt;标签 16.2.6、&lt;bean:resource&gt;...

    Java Web程序设计教程

    7.3.3使用struts2标签设计模板 170 7.4freemarker与velocity的比较 171 本章小结 171 课后练习 172 第8章hibernate框架基础 173 8.1orm简介 173 8.1.1应用orm的意义 173 8.1.2流行的orm框架 174 8.2准备...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e...

    java web 开发详解

     优点: Java EE标准,这意味着有很大的市场需求和更多的工作机会 上手快速并且相对容易 有大量可用的组件库 缺点: 大量的JSP标签 对REST和安全支持不好 没有一个统一的实现。既有SUN的实现,又有Apache的实现——...

    JAVA程序开发大全---上半部分

    17.3.1 标签(Label)组件 294 17.3.2 按钮(Button)组件 295 17.3.3 文本框(Text)组件 295 17.3.4 列表框(List)组件 297 17.3.5 组合框(Combo)组件 298 17.3.6 菜单栏(Menu)和菜单项(MenuItem) 299 17.4...

    java面试题库2021.pdf

    ①IoC 与 Bean 配置、 管理 ②AOP 与事务、 权限控制 ③S2SH 整合开发 ④Spring, JPA 整合 2、 Hibernate ①ORM 与持久化映射 ②延迟加载、 性能优化 ③HQL 查询、 条件查询、 SQL 查询 ④二级缓存与查询缓存 3、 ...

Global site tag (gtag.js) - Google Analytics