浏览 1549 次
锁定老帖子 主题:struts 2.1.6表达式解析
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-24
下面就我在暑期做的一个实际项目中用到的具体标签详细的解释。 在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中的标签灵活度越来越大,希望对于标签的使用有任何心得的话欢迎贴出来大家共享! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |