论坛首页 入门技术论坛

struts 2.1.6表达式解析

浏览 1549 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
作者 正文
   发表时间:2009-08-24  
     无论在哪一个Web应用框架中,提供从程序中解析数据到显示页面中的表达式都是很重要的,各个框架也都对其做了很多努力!这里提到的struts2.x系列框架更是如此,提供了功能很强大的标签,可以使得我们方便的再Jsp页面中显示我们需要的信息。
      下面就我在暑期做的一个实际项目中用到的具体标签详细的解释。
    在struts中把标签分为五类分别是:控制标签,数据存取标签,与表单相关标签以及AJAX标签。
    首先介绍一下控制标签。
    顾名思义:这种标签的意思就是提供了控制JSP中程序代码的执行流程的方式。
    比如:很多网站都有这一功能:同一个页面,如果浏览者已经注册并登陆,在右上角会显示欢迎浏览者的信息,相反如果还没有登陆的浏览者则会看到:"对不起你还没有登录,请登录或注册!"这样的信息。其实这种效果的实现方式很简单,就是利用了控制标签中的<s:if test="%{true}"></s:if>这个标签;如果test属性值中的表达式结果为TRUE时就执行其里面的内容,否则的话转去执行<s:else></s:else>中的内容。下面是一个具体的实例:
如果用户已经成功登陆的话它的会员信息会保存到Session中,名称为"member",下面的代码会判断其是否成功登陆,并更具判断结果执行不同的代码段。

<s:if test="%{#session.member!=null}">
欢迎 ${member.name} 的到来! <a href="/blog/myblog.jsp">我的博客</a>
</s:if>
<s:else>
请先登录或<a href="/OnGoing/login/register.jsp">注册</a>
</s:else>
</div>
还有一个很是常用的控制标签是:<s:iterator value=""><s:/iterator>它的作用是对通过value指定的List值进行迭代!这里要注意value中的值必须是ONGL表达式或者是一个具体的list;比如valu
下面给个具体的例子说明一下其用法:
我现在有个Action属性为一个领域对象:topicbloginfo,其field:name,times,date,leftwdtotales,replytotales分别表示:文章名字,浏览次数,发表日期,留言数量以及回复数量。在通过对应的Action为其赋值后,在随后的结果页面中将其像是出来:比如
<s:iterator value="%{topicbloginfo}">(外面的那个括号可以省略,它只是说明里面是一个ONGL表达式,但是实际应用中我把它去掉一样正常)
<s:property value="name"/>
<s:property value="times"/>
<s:property value="date"/>
<s:property value="leftwdtotales"/>
<s:property value="replytotales"/><br>
</s:iterator>
这个标签很是实用它不仅可以按属性显示值,还可以显示一个list对象中的各个值而不必显示的指明属性名字比如:
有一个嵌套的list数据类型:Dlist,其里面存放的是一个有很多值组层的又一个List类型。我们利用上述标签可以这样解析:
<s:iterator value="Dlist">
<s:property>
</s:itertor>
这样的话它会自动把里面List中的各个数据都显示出来!
    接着我们介绍一下数据存取标签:
    同样顾名思义就是对Action中的各个属性进行解析或者是设置。
    下面是全部的属于该类的标签:
a
action
bean
date
debug
i18n
include
param
property
push
set
text
url
其中本人在项目中使用了action,param,
property以及url 标签。现对他们分别做一下介绍:
action 标签是一个很不错的选择,特别是某一个页面中的数据信息量很大,同时需要几个Action返回的结果的时候。
它在作为一个独立的Action功能的同时还可以有选择的将其结果(包括视图)包含在一个JSP页面中;它还有几个属性我们可以灵活的设置使得它的应用更加灵活!
<div id="forum"><s:action name="showtopic" executeResult="false" namespace="/frontPage">
<s:param name="ID" value="%{'1'}"/>
</s:action>
</div>
name 表示你要调用的action名字;executeResult表示你是否将其视图结果返回;namespace表示你所调用的action所在的包名;另外需要注意的是如果你要在包含它的JSP页面中解析这个action的属性的话则必须在其标签内部。
接着就是<s:url></s:url>和<s:param>标签,之所以将它们写在一块是因为它们总是在一起工作,效果更加强大!所谓男女搭配,干活不累!
<s:url id="test" value="/frontPage/showtopic.action"><s:param name="ID" value="%{'1'}"/></s:url>
<s:param>标签中的name属性表示的是Action中的属性,而其值则通过ONGL表达式来指定。
其实它就是Struts中的<a:href="showtopic.action?ID=3"></a>的翻版!不过需要注意的是请求参数赋值的范围不一样啊,前者是赋值到ValueStack中,而后者只是赋值到request中。
这个标签同时还可以去其他标签联用看上去更加舒畅:比如:
<s:url id="test" value="/frontPage/showtopic.action"><s:param name="ID" value="%{'1'}"/></s:url>
<s:action name="%{#test}" executeResult="false" namespace="/frontPage"></s:action>
还有:
<s:action name="showtopic" executeResult="false" namespace="/frontPage">
<img id="indicator" src="${pageContext.request.contextPath}/images/1.jpg" style="display:none"/>
<sx:div href="%{#test}" indicator="indicator" id="forum">
<s:param name="ID" value="%{'1'}"/>
  Initial Content
</sx:div>(下面会说,这是个ajax标签)
<s:property/>这个标签就不用说啦我们一直都在用它!
   说完了上述两种标签是不是觉得struts 2.x标签相比struts 1.x有很大的提高!不过下面这几种更让你激动!
   全部的表单标签:
checkbox
checkboxlist
combobox
doubleselect
head
file
form
hidden
label
optiontransferselect
optgroup
password
radio
reset
select
submit
textarea
textfield
token
updownselect
我在项目中用到了以下标签:file,hidden ,password,select ,radio,textarea,textfield ;
现对它们中的几种进行说明:
hidden这个标签作为两个Action之间信息传递的一种方式还是很方便的,
比如你有个需求:注册用户在自己的博客可以发表自己的文章,这样的话,你就可以在你的发表文章对应的表单中加入下面这一句:
<s:hidden name="topicblog.memberId" value="%{#session.member.id}" />,这样的话该用户ID会随着表单一起复制到topicblog.memberId属性是不是很方便?
你还可以利用这个值来获取上一个Action的属性值。
<s:select>这个标签很复杂但功能也很强大!它不仅可以显示你给它指定的一系列值,还可以显示特定Action中的List属性以及Map属性;下面是一个显示特定List类型数据的实例。
<s:select label="请选择文章分类"
       name="topicblog.cateTopicId"
       list="catetopic"
       listKey="id"
       listValue="name"
       required="true"
       
/>
name表示listKey对应的属性值赋值到得下一个Action属性名;list表示从上一个Action中获取的List类型的属性值;listvalue表示显示在下拉列表中的值;listkey与listvalue是一一对应的,这里的catetopic是一个List,里面包含的是一个对象,有id,name等属性。
当然你也可以直接自己指定所要显示的值:比如:
指定Map类型的数据:
<s:select label="Months"
       name="months"
       headerKey="-1" headerValue="Select Month"
       list="#{'01':'Jan', '02':'Feb', [...]}"
       listKey="key"
       listValue="value"
       required="true"
/>
这时的listkey和listvalue和上面的就不一样!这个显示的值是map中的值,传递的是对应值的键值!
关于file标签我将会在另一篇文章中讲述;其他的就没有什么啦。
   最后关于Ajax标签正在学习中,以后再续!
  struts中的标签灵活度越来越大,希望对于标签的使用有任何心得的话欢迎贴出来大家共享!
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics