Struts1 NESTED标签

Nested标签库的分两部分

一部分用于表达JavaBean之间的嵌套关系


另一部分能够在特定的嵌套级别提供和其他Struts标签相同的功能。

<nested:nest>

<nested:nest>,定义一个新的嵌套级别


<nested:writeNesting>,输出当前嵌套级别信息


<nested:nest>标签可以表达JavaBean之间的嵌套关系


eg.


以三个JavaBean为例,分别是:PersonForm Bean,Person Bean和Address Bean,


在PersonForm Bean中包含一个Person Bean类型的属性person,在Person Bean中又包含一个Address Bean类型的属性address。


则用nested标签表示如下:


定义两个<nested:nest>标签,第一个<nested:nest>标签嵌套在<html:form>标签中,如下:


<html:form action="/showPerson">


<nested:nestp roperty="person">


LastName:<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:formaction="/showPerson">


<nested:nest property="person">


.............
<nested:nest property="address">

Current nesting is :


<nested:writeNesting/><br>


Street1:<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进行处理,非常方便。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值