Struts Nested标签库的一部分标签用于表达JavaBean之间的嵌套关系,还有一部分标签能够在特定的嵌套级别提供和其他Struts标签相同的功能。
- <nested:nest>,定义一个新的嵌套级别
- <nested:writeNesting>,输出当前嵌套级别信息
<nested:nest>标签可以表达JavaBean之间的嵌套关系,以三个JavaBean为例,分别是:PersonForm Bean,Person Bean和Address Bean,在PersonForm Bean中包含一个Person Bean类型的属性person,在Person Bean中又包含一个Address Bean类型的属性address。
定义两个<nested:nest>标签,第一个<nested:nest>标签嵌套在<html:form>标签中,如下:
<html:form action="/showPerson">
<nested:nest property="person">
Last Name:<nested:text property="lastName"/><BR>
.....
</nested:nest>
</html:form>
以上<nested:nest>标签的上层JavaBean为於<html:form>表单标签对应的PersonForm Bean,<nested:nest>标签的property属性为“person",代表PersonForm Bean的person属性,这个person属性代表Person Bean,因此嵌套在<nested:nest>标签内部的Nested标签都相对于这个Person Bean,例如第一个<nested:text>标签的property属性”lastName“,代表Person Bean的lastName属性。
第二个<nested:nest>标签嵌套在第一个<nested:nest>标签内部:如下
<html:form action="/showPerson">
<nested:nest property="person">
.............
<nested:nest property="address">
Current nesting is :<nested:writeNesting/><br>
Street 1:<nested:text property="street1"/><BR>
.....
</nested:nest>
</nested:nest>
</html:form>
在以上代码中,第二个<nested:nest>标签的property属性为“address",代表PersonBean 的address属性,这个address属性代表Address Bean,因此嵌套在第二个<nested:nest>标签内部的Nested标签都相对於这个Address Bean。
第二个<nested:nest>标签内还嵌套了一个<nested:writeNesting>标签,它显示当前的嵌套级别,输出结果为”person.address".
在默认情况下,<nested:nest>标签的property属性为当前ActionForm Bean的某个属性,或者为於上层<nested:nest>标签对应的JavaBean的某个属性,可以使用<nested:root>标签来显式指定顶层级别的JavaBean,<nested:root>标签的name属性指定JavaBean的名字,嵌套在<nested:root>标签中的<nested:nest>标签的property属性为这个JavaBean的某个属性。
和其他标签库中的标签功能相同的Nested标签
许多Nestd标签库中的标签具有和其他标签库中的标签相同的功能,区别在于Nested标签库中的标签属性相对于当前的嵌套级别,例如
<nested:nest property = "person">
Last name :<nested:text property="lastName"/>
</nested:nest>
上面的<nested:text>标签和<html:text>标签具有相同的功能,都可以生成文本框,两者的区别在于<nested:text>标签的property属性为於当前嵌套级别对应的JavaBean的某个属性,而<html:text>标签的property属性为於当前表单对应的ActionForm Bean的某个属性。
比如我有一个User类和一个UserInfo类,前者记录用户的帐号密码,后者记录用户的详细信息。前者也有一个UserInfo属性,这样它们两者是嵌套了。
现在我要把这个用户的帐号和详细信息都显示到界面上。
一种方式是在actionForm中用两个属性User user和UserInfo userInfo来存储,在jsp中就可以用如下方式显示出来:
<nested:nest property="user">
帐号:<nested:write property="account"/>
</nested:nest>
<nested:nest property="userInfo">
姓名:<nested:write property="name"/>
性别:<nested:write property="sex"/>
</nested:nest>
由于user和userInfo本身就是嵌套的,所以第二种方式就在actionForm中使用一个User user属性即可:
<nested:nest property="user">
帐号:<nested:write property="account"/>
<nested:nest property="userInfo">
姓名:<nested:write property="name"/>
性别:<nested:write property="sex"/>
</nested:nest>
</nested:nest>
这样处理是不是很方便了,actionForm可以直接放上数据存储对象,如果使用了hibernate做数据持久层,我们就可以直接把持久画对象放入actionForm来显示到界面上,不用在actionForm里写很多属性来分别存储数据,也免去了给这些属性分别赋值的过程。
如果我们把上边例子中的<nested:write/>标记换成<nested:text/>,这就类似于<html:text/>标记,是一个输入框,这样我们就可以把街面上输入一次提交到actionForm中的这个数据存储对象,比如user。我们在action中就可以直接获得这个user进行处理,非常方便。
我感觉 nested 标签就是把表单直接对应到一个业务类对象,在FORM类中定义这个业务类对象就可,这个标签用起来也不难,而且还挺好用,
比如说有个 表单类PersonForm,业务类Person,在PersonForm中定义 Person person=new Person(); 注意这里用new分配空间,不能只是这样 Person person; 在Person类中定义 private String name; private String sex;
那么在.jsp中表单部分如下:
java 代码
-
-
<html:form action="PersonAction">
-
<nested:nest property="person>
- name: <nested:text property="name"/><br/>
-
sex: <nested:text property="sex" /><br/>
-
</nested:nest>
-
<html:submit/>
-
</html:form>
-
其中 <nested:nest> 理解就是定义一个类层次,它也可以嵌套使用,当业务类中还包含其他业务类时就可以使用它的嵌套,当使用嵌套时如果想显式知道嵌套的层次可以利用nested 标签的 <nested:writeNesting> 标签进行输出。比如现在我们再加一个业务类 Address ,类中数据元素为: private String country; private String province; 然后在 业务类 Person 中加上 private Address add=new Address(); 结合<nested:writeNesting> 后的.jsp 为:
java 代码
-
-
<html:form action="/PersonAction">
-
<nested:nest property="person">
-
<nested:message key="use_nested.jsp.form.name"/><nested:text property="name" size="18"/><br/>
-
<nested:message key="use_nested.jsp.form.sex"/><nested:text property="sex" size="18" /><br/>
-
<br/>
-
<nested:nest property="add">
-
current nesting is: <nested:writeNesting/><br/>
-
<nested:message key="use_nested.jsp.form.country"/><nested:text property="country" size="18"/><br/>
-
<nested:message key="use_nested.jsp.form.province"/><nested:text property="province" size="18"/><br/>
-
</nested:nest>
-
</nested:nest>
-
<html:submit><bean:message key="use_nested.jsp.form.submit"/></html:submit>
-
</html:form>
-
其中 <nested:writeNesting/> 出会输出 person.add 表明当前类层次
当你输出表单数据时 还可以定义一个顶层级别的 javaBean,这时候就利用 nested 的 <nested:root> 标签,比如要输出上个表单元素时,顶层级别就是 PersonForm ,其他则与上面是一样,如下:
java 代码
-
-
<jsp:useBean id="PersonForm" type="nestedtag.PersonForm" scope="request" />
-
<nested:root name="PersonForm">
-
<nested:nest property="person">
-
<nested:message key="use_nested.jsp.form.name"/><nested:write property="name"/><br/>
-
<nested:message key="use_nested.jsp.form.sex" /><nested:write property="sex"/><br/>
-
<nested:nest property="add">
-
<nested:message key="use_nested.jsp.form.country"/><nested:write property="country"/><br/>
-
<nested:message key="use_nested.jsp.form.province"/><nested:write property="province"/><br/>
-
</nested:nest>
-
</nested:nest>
-
</nested:root>
-
分享到:
相关推荐
Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:Bean Tags、HTML Tags、Logic Tags、Nested Tags 和 Tiles Tags。下面将对前三个标签库中的标签进行详细的介绍。 Bean Tags Bean Tags...
4. `struts-nested.tld`:Nested标签库,用于处理嵌套属性,通常与Tiles框架一起使用,使得在JSP页面中可以方便地访问多层嵌套的Bean属性。 了解这些标签库后,开发人员可以更高效地构建视图层,减少Java代码在JSP...
**Nested标签库**增强了对其他Struts标签的嵌套使用能力,这在处理复杂页面结构时非常有用。 **Tiles标签库**则是为了创建复合式的网页,允许开发者将多个组件组合成一个完整的页面,提高了页面布局的灵活性和可...
5. **Nested标签库**:这个库增强了其他Struts标签的嵌套能力,使得在复杂表单和布局中使用Struts标签更加方便。 Struts标签库的一个重要特性是它们支持属性的嵌套引用,这意味着可以使用`.`来访问对象的深层属性,...
5. **nested标签**:当处理嵌套的JavaBean或复杂对象时,nested标签库提供了一种解决方式,例如`<nested:property>`可以深入到对象的嵌套属性。 6. **display标签**:displaytag库提供了一套标签,用于创建复杂的...
Struts标签库提供了一组预定义的JSP标签,这些标签有助于开发者更有效地处理常见的Web开发任务,如表单处理、数据展示、逻辑控制等。在本文中,我们将深入探讨其中的Bean Tags、HTML Tags和Logic Tags。 1. **Bean ...
5. **Nested标签库**:提供了一种增强的嵌套功能,使得在HTML标签库中的标签可以更好地互相嵌套和操作,提高复杂表单的构建能力。 接下来,我们深入了解一下HTML标签库的一些常见标签和属性: - `<html:html>`:这...
Struts1标签库是Java Web开发中用于构建MVC架构的Apache Struts框架的重要组成部分,它提供了一系列方便的标签,帮助开发者简化视图层的实现。这篇文档详细介绍了Struts1标签库的主要内容,旨在帮助初学者快速掌握...
Nested标签库是为了支持嵌套形式的HTML元素而设计的,特别是在处理复杂表单时很有用。例如,`<nested:property>`标签允许在表单中处理嵌套的JavaBean属性。这个库使得在Struts1中处理层次结构的数据变得更加简单。 ...
Bean标签库主要处理JavaBeans,Nested标签库用于处理嵌套属性,Tiles标签库则用于页面布局和组合。 通过学习这些文档,开发者可以更好地理解和掌握Struts1.0框架的标签库,提高开发效率,同时也能为向更现代的框架...
6. **Nested标签库** Nested库是为了处理具有嵌套属性的JavaBean而设计的,使得在JSP页面中可以方便地引用和操作这些属性,提高了代码的可读性。 7. **Tiles标签库** Tiles扩展了Struts框架,提供了一种方式来...
5. **Nested标签库**:处理嵌套的ActionForm属性,使在JSP中可以更方便地引用深层对象属性。 6. **XSLT标签库**:用于在JSP中进行XML数据的转换和呈现。 **三、Struts工作流程** 1. 用户发送HTTP请求到服务器。 2...
Nested标签库是专门为处理嵌套属性而设计的,主要用于解决当JavaBeans包含其他JavaBeans作为属性时的表示问题。例如,`<nested:property>`标签可以递归地访问JavaBean的嵌套属性,这对于展示和编辑复杂的数据结构...
以下是对 Struts 标签库的详细解释: 1. **Bean Tags**: Bean Tags 主要用于创建、访问和操作 Java 对象(bean)。你可以用它来初始化 bean,获取或设置 bean 的属性,以及根据 HTTP 请求中的 cookies、headers ...
5. **Nested标签库**: Nested库增强了其他Struts标签的嵌套功能,使得在复杂结构的数据模型中使用标签更加方便。例如,可以嵌套`<nested:property>`来处理多层属性的访问。 在使用Struts1标签时,有几个共同的...
5. `nested`标签库:这个库为处理嵌套属性和复杂对象提供了支持,例如`<nested:property>`可以访问和显示对象的嵌套属性。 在"Struts标签库查询手册.chm"文件中,你将找到这些标签的详细使用方法,包括它们的属性、...
4. **Nested标签**:当处理复杂对象时,Nested标签库提供了一种嵌套的方式来访问对象的属性。这使得在显示层次结构数据时更加方便。 5. **Tiles标签**:Tiles框架允许开发者创建可重用的页面组件(Tiles)。通过`...
Struts标签库是JSP自定义标签的集合,它们提供了用于构建动态Web页面的功能,如表单处理、控制流程等。这些标签与Struts框架紧密结合,可以无缝地与ActionForm、Action和控制器交互,减少硬编码,提高代码可读性。 ...