例子:
//formBean定义:
public class PersonForm extends ActionForm {
Person person = new Person();
public void reset (ActionMapping mapping, HttpServletRequest request) {
Address[] address = new Address[2];
address[0]= new Address();
address[1]= new Address();
person = new Person();
person.setAddress(address);
}
public Person getPerson() {
return this.person;
}
public void setPerson(Person person) {
this.person = person;
}
}
//Person类:
public class Person {
private String lastName;
private String firstName;
private String age;
private Address address;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setAge(String age) {
this.age = age;
}
public String getAge() {
return age;
}
public void setAddress(Address address){
this.address = address;
}
public Address getAddress(){
return address;
}
}
//Address类:
public class Address {
private String street1;
private String street2;
public String getStreet1() {
return street1;
}
public void setStreet1(String street1) {
this.street1 = street1;
}
public void setStreet2(String street2) {
this.street2 = street2;
}
public String getStreet2() {
return street2;
}
}
//在jsp中使用标签
<html:form action="/showPerson">
<nested:nest property="person">
Last Name: <nested:text property="lastName"/><BR>
First Name: <nested:text property="firstName"/><BR>
Age: <nested:text property="age"/><BR>
P>
<nested:iterate id="child" name="person" property="address" type="nestedtaglibs.Address">
Current nesting is: <nested:writeNesting/><BR>
Street 1: <nested:text name="child" property="street1"/><BR>
Street 2: <nested:text name="child" property="street2"/><BR>
</nested:iterate >
</nested:nest>
<html:submit/>
</html:form>
详解:
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进行处理,非常方便。
分享到:
相关推荐
6. “介绍.txt”文件:这个文件可能包含了游戏的基本信息、开发团队的介绍、游戏玩法的简述或者开发过程中的一些注意事项,对于理解游戏的背景和使用方法至关重要。 7. “ts版消消乐”源代码:这个文件可能是游戏的...
Neste projeto disponibilizamos是根据实际实验做的instânciascriadas。 Instânciaspara o POACE 实验人员,在西班牙testes的功用论坛,在geradas com dados reais etrêscom dadosfictícios的sendo quatro ...
Repositórioapenas para estudoCurso:在上下文中构建应用程序Neste curso vamos aprender mais sobre acriaçãodeaplicaçõesem contextos delimitados。 讲师:推荐人: 阿诺塔斯计划纲领简介基础知识雌性模型...
为了模仿Instagram的设计,可能会使用伪类选择器如`:hover`、`:focus`来实现鼠标悬停和焦点状态下的效果。此外,CSS3还提供了丰富的动画和过渡效果,可以用来增强用户体验,比如输入框获得焦点时的边框颜色变化,...
Neste projeto eu crio um todo-list com asaçõesde cadastrar,deletar,exclir e listar。 Alémde praticar toda a parte de testes em cima destaaplicação。 Começando 安装 Basta clonar este ...
Neste artigo,作为服务的简单示例,使用Java 7 NIO.2的API作为简单的客户端。 以类AsynchronousServerSocketChannel和类AsynchronousSocketChannel的形式,以类,服务对象和客户端的实现原则为依据。 在运河NIO....
亲子纲Atividades usando o Portugol Studio。
Neste projeto,serácopydo做一个接口,做主要站点,流式传输通用工具技术,包括HTML5,CSS3和JavaScript。布局,创建CSS3 com容器和各种变量,使用com或Flexbox使用com实用插件Jquery的一个不错的选择。 Netflix...
Automation-Selenium-WhatsApp:Neste projeto,Python和utilities的使用。Selenium para automatizar o envio de mensagens para determinados contatos或gruposatravés做的WhatsApp Web。 Com isso,在环境中保存...
Neste Projeto,utilsados to dos osmódulosapresentados durante,bootcamp de devolvevolved或Python做IGTI。 Móduloscomo o scikit-learn,pandas,numpy e flasksãoempregados para realizar或机器模型的“ ...
在当前的Web开发领域,React和NextJS框架的结合使用已经成为构建现代、高效前端应用的热门选择。本项目"Kaguya-sama Quiz"就是一个很好的实例,它在Alura的"Imersão React NextJS"活动中诞生,以热门动漫《Kaguya-...
示例: Este projeto签证ajudar diretamente os desenvolvedores,amentles quenãose sentemconfortávelcom oinglês,nelaboraçãodadescriçãode seus projetos,fornecendo neste模板uma base comtópicos,...
Trabalhos de LP Esterepositório为Para os alunos e alunas de LP(UFF,Rio das Ostras)提供服务,Git / Github registrando os链接了para osrepositóriosdos trabalhos que forem desenvolver。...
每年都有一些新的属性进入ECMA262标准,今年发布的ECMAScript2019/ES10同样也有很多新的特性,本文将会挑选一些普通开发者会用到的新属性进行深入的解读。 Array.prototype.flat() ...const neste
计算 一个新的Flutter项目。 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的,其中提供了教程,示例,有关移动...
德意志综合运动协会...在Jogos工业中使用entrada dousuário(neste caso toque na tela)。 Algumas解决方案是临时保全的(forguard propostas evêmsendo utilizadas em diversos jogos)。 语境化 Alguns modelos
Neste projeto,在美国的其他应用商店提供API,在GitHub上提供关于使用通用语言的信息。 应用程序化身,正常使用人名,安全管理人事,不安全使用人事事请约。 实用程序和书目: ReactJS(desenvolvimento的框架) ...
概率的功能 Neste desafio vamos praticar sobre testes dehipóteses,um dos conceitos centrais dainferê... 推荐使用环境的虚拟机,也可以使用虚拟环境的requirements.txt 。txt随需安装的软件包: $ pip
概率的功能Neste desafio vamos praticar sobre testes dehipóteses,um dos conceitos centrais dainferênciaestat... 推荐使用环境的虚拟机,也可以使用虚拟环境的requirements.txt 。txt随需安装的软件包: $ pip
LabeX项目 首先在Labenu设计训练营,然后在设计桌面的设计竞赛中脱颖而出。... Nãofoi Implementada一个负责任的Neste Projeto。 ======= Nãofoi Implementada一个负责任的Neste Projeto。 e4cf6