struts1-Tag 学习总结

struts1的标签与普通的html标签有一些不同:

  1. 一个form表单无论是以get或post方式提交后,页面表单内的标签会以key-value类似url 后面参数的形式提交到后台。这点两者是类同的,只不过标签参数不同,普通html标签key通常就是name属性,struts采用FormBean这个对象来承载页面到后台数据的传递(其实就是一种Map结构),这个Map的key就是struts标签的property属性,其实看看最终的html会发现struts1标签的property参数就是变成了普通html标签的name属性了。struts采用这种包装做法使得后台通过key获取到的value不再是简单的字符串,而是某个自定义类,或者是某个集合等等,而且property可以是嵌套的属性如ClassA.ClassB.property,这样我们就可以把一个form内所有标签都封装到一个VO里面,无论是从页面直接读取VO到后台,还是后台初始化VO到页面展示都是非常方便的。
  2. 注意虽然大部分标签看上去名字类似,其实很多用法并不相同。比如:最常见的就是strtus标签不允许内嵌其他代码。这点在结合jstl或者jsp表达式的时候可以看到,<input ${...EL} ...> 以及 <input <% ... %> ...>、<input <c:if ...> ...> 都是合法的,但换成<html:input ...> 就会报错了。这点很多人不爽,因为普通html标签配合jstl可以完成比较复杂逻辑的显示。
  3. struts标签最终都会变成普通html标签,其property属性会变成普通标签的name属性,而其struts标签的name属性通常(有例外)是用来指定使用哪个ActionForm里的数据。另外JS里常用getElementById() 方法可引用struts标签的styleId属性。
  4. 我们在servlet中常用request.getParameter("param")来获得URL(eg. www.sammythingking.com?param=value) ?后面参数的值,同样的,无论是在servlet还是在action中,都可以用这种形式来获取URL后面的参数。并且在struts中,如果你在相应地ActionForm中已有param参数的String类型property定义,那么你在处理的action中也可以用xxForm.getString("param")来获得。

几个常用的标签:

<html:select>

  在struts1中,与select标签有关的tag有:

  • <html:select> 
  • <html:option>
  • <html:options>
  • <html:optionsCollection>

下拉列表算是比较常用的了,在struts1中,通常我们都是在FormBean中定义一个集合来用下拉列表select展示。

<html:select> 的有两个比较重要的属性:

property* Name of the request parameter that will be included with this submission, set to the specified value. String
multiple     If set to any arbitrary value, the rendered select element will support multiple selections.            String

property属性用来后台获取用户选择的值,multiple表示是否为多选(同普通html标签) 

<html:options> 和 <html:optionsCollection>就是用来装载option集合的了:

<html:optionsCollection>:

<html:select property="...">      
<html:optionsCollection property="collection<T>" label="T.property1" value="T.property2" />
</html:select>



<html:options>:

<bean:define id="c" name="FormBean"  property="collection<T>"/>
<html:select property="property">
<html:options collection="c" labelProperty ="T.property1" property ="T.property2" />
</html:select>

注意:<html:options>的collection属性必须是JSP上定义好的JSP Bean,property相当于value。

如果没有定义collection属性,那么labelProperty和property属性的就表示ActionForm中属性(必须是集合):

<html:select property="property">      
<html:options property="collection1" labelProperty ="collection2" />
</html:select>

这个时候collection1就相当一个value的集合,labelProperty就相当于一个label的集合。两者一一对应,如果collection1的长度大于collection2的长度,多出的元素将作为label,反之,collection2多出的元素将被抛弃。

补充:还有个name属性,可以引用页面上定义的JSP Bean作为循环的集合。

参照:http://struts.apache.org/1.x/struts-taglib/tagreference.html#html:options 
 

可以看到struts的select标签并没有selected属性,完全是通过option的 value绑定到 select的property 属性来确定哪个option被选定。有时候可能需要一些复杂点的逻辑来生成页面,建议采用JSTL+普通标签来实现会更合适。 

待续...

 

  

 

  

 

  

  

  

posted @ 2011-08-22 16:24  SammyThinking  阅读(702)  评论(0编辑  收藏  举报