`
zwchen
  • 浏览: 795612 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Struts的html:options 标签内幕

阅读更多
最近用一个在日本很流行的框架Seasar开发,表示层用Mayaa做模板语言,它可以支持Struts、JSTL,当然也有自己的一套标签。当涉及到下拉列表时,问题出来了。
之所以要记录下来:
1、 网上对Struts的html:options标签使用有误,就是一个下拉列表,有那么复杂吗?Webwork里面处理起来非常简单,而Struts确要LabelvalueBean,感觉异常复杂。http://java.ccidnet.com/art/3739/20060721/649923_1.html
2、 Struts1.24官方的examples里面没有html:options的例子,mailReader例子倒是有一个,我仔细研究过,但那个例子估计一眼看不懂,因为它对那个下拉列表“Server Type”里面的初始值是通过DigestingPlugIn赋上的,那段代码需要对Digester库、Struts的PlugIn机制、org.apache.struts.util.LabelValueBean等有了解,当然对mailReader的业务本身很了解。
3、 几本Struts电子书,包括官方文档,对这个解释都非常模糊:collection、name、property、labelProperty、labelProperty。难怪别人说Struts提供的标签不好用。如果不是项目要求,我一般会选择JSTL,简洁啊!但Struts的html tag部分确实没法取代,因为它和验证、自动赋值耦合太紧。
4、 Options标签非常常用,也是标签中最难理解的几个之一,我看到的很多例子,包括日本人提供的例子都是手动for循环赋值

Struts的标签真的这么费劲吗?我决定看看它的源码:org.apache.struts.taglib.htmlOptionsTag.java

我就不贴源码了,我大致说一下设计原理吧:
1、 如果找不到SelectTag,抛出异常,说明必须在select标签下。

2.1、 当collection属性不为null时,从该collection中得到iterator,该collection可以为Array,Collection(如ArrayList,Vector…),Map,Iterator、Enumeration等,具体方法是:
protected Iterator getIterator(String name, String property) throws JspException

2.2、 将该iterator循环,获取每个item,也就是collection里面的JavaBean,通过
BeanUtils库的PropertyUtils.getProperty(bean, property)方法,property就是Bean里面的某个getXXX方法,它最终显示为option的value属性。Note:property就是标签的property属性。

2.3、 对于option的label属性,如果没有设置labelProperty,就用value,否则用它,也就是getYYY的yYY属性。

2.4、 每个迭代完成后,都会将其加入一个StringBuffer中,也就是最后页面显示。那段html。

3.1、如果用自定义的iterator来解析options的话,那就是name、property、labelName、labelProperty这四个属性了。我靠,没有例子,官方文档谁懂?我不解释了。

4、另外,官方还提供了一个html:optionsColleciton 标签,它和options标签非常类似,我对照源码,配置了一下,还是好用的,它和optionsTag源码几乎一样。

5、我发现LabelvalueBean没有必要用。

下面是它们两个的配置,都测试过:
说明:大家忽视m:id标签属性,其它和Struts一样,catList是一个分类列表,请不要用EL,如${catList}, 它是通过request.setAttribute("catList", catList)设置的。标签库会通过pageContext.findAttribute(name)找该对象(sun的API注释:Searches for the named attribute in page, request, session (if valid), and application scope(s) in order and returns the value associated or null):

	<html:select m:id="category" property="categoryId">
		<html:options collection="catList" property="id" labelProperty="name" />
	</html:select>
	<html:select m:id="category" property="categoryId">
		<html:optionsCollection  name="catList" label="name" value="id" />
	</html:select>


总结:Struts的源码还是挺简单的,我以前读过大部分核心源码,并自己仿照Webwork写了一个Web框架,拿来项目中用,真爽。

建议:大家要是看例子不太明白,又没有例子,也不妨读读。因为代码都是类似的,你读过OptionsTag的源码,其它类似源码应该都很简单了。



分享到:
评论
2 楼 宏基小键盘 2007-06-18  
m:id 是什么玩意儿?struts html tags里貌似没有的说
1 楼 rainlife 2007-04-20  
html:options确实不好用,以前还自己去实现了它的功能,当然,结果就是重复发明了轮子。

相关推荐

    struts操作select标签实例

    在Struts中,`html:select`标签是用于创建HTML下拉列表的一个重要元素,特别适用于用户界面中需要选择单一或多个选项的场景。本文将深入探讨`html:select`标签的使用方法及其相关知识点。 首先,我们需要理解`...

    struts的htmlcheckbox标签的默认选中问题

    在探讨“Struts的htmlcheckbox标签的默认选中问题”这一主题时,我们首先需要对Struts框架以及htmlcheckbox标签有一个基本的了解。Struts是一个开源的MVC(Model-View-Controller)框架,用于构建企业级的Java Web...

    struts1.x标签库详解

    Struts1.x 标签库详解 Struts1.x 标签库是 Apache Jakarta 项目的一部分,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:Bean ...

    struts标签(如<html:form>)

    关于STRUTS标签的一些详细说明。 如:&lt;html:form&gt;的说明。

    struts2 标签使用

    ### Struts2 `&lt;s:if&gt;` 标签使用详解 #### 概述 Struts2 是一款基于 Java 的企业级 Web 应用框架,它利用了 MVC(Model-View-Controller)架构模式来帮助开发者构建可扩展、易于维护的 Web 应用程序。在 Struts2 中...

    Struts html:checkbox框初始默认是选中的解决方法

    在使用struts标签html:checkbox 的时候,如何让checkbox框默认是选中的,一般情况下都是当Formbean里面该Property的值和标签上value给定的值相等的时候,生成的jsp页面上才是选中的。 在Struts中几种情况可以使标签...

    Struts标签- HTML标签

    在Struts中,HTML标签库是一个非常重要的部分,它提供了简化和增强HTML表单处理的能力。这些自定义标签帮助开发者更好地与Struts控制器层交互,减少代码量,并提高代码的可读性和可维护性。 1. **HTML标签库概述** ...

    struts1标签库详解

    * bean:struts:将一个 Struts 的 acción 绑定到 page 作用域中,以便其它标签可以使用该值。 * bean:write:将一个 bean 的值写到页面上。 HTML Tags HTML Tags 是 Struts 中的 HTML 标签库,包含的标签可以用来...

    struts2.0中s:datetimepicker标签使用范例

    在探讨《struts2.0中s:datetimepicker标签使用范例》这一主题时,我们首先需要理解struts2框架以及其内置的s:datetimepicker标签的用途与配置方法。Struts2是一个开源的Web应用框架,基于MVC(Model-View-Controller...

    JSP Struts之HTML标签库详解

    例如,`&lt;html:html&gt;`标签用于设置页面的基本属性,如`locale`和`xhtml`。`&lt;html:img&gt;`用于插入图片,而`&lt;html:link&gt;`则用于创建链接。此外,还有`&lt;html:form&gt;`,`&lt;html:text&gt;`,`&lt;html:password&gt;`等标签用于创建表单...

    struts2标签大全

    在Struts2中,使用了一系列的标签库来增强JSP页面的功能,使得开发者可以更方便地实现业务逻辑与视图的分离,提高代码的可读性和可维护性。本篇文章将详细介绍Struts2中的各种标签及其应用。 1. **s:form标签**:这...

    Struts2实例 国际化 类型转换 struts标签

    这个实例项目展示了如何在实际应用中结合Struts2、国际化、类型转换以及Struts2自定义标签来实现用户管理功能,包括用户数据的增删改查。 首先,我们来看Struts2的核心概念。Struts2作为MVC框架,它负责处理HTTP...

    struts-html标签

    1. `&lt;html:html&gt;`标签:这是Struts HTML标签库的基础,它可以设置`locale`属性,用于处理国际化,如果未指定`locale`对象,系统会从请求头的`accept-language`中获取。此外,还可以设置`lang`属性,替代Struts 1.2...

    struts标签 struts标签 struts标签

    Struts标签是Apache Jakarta Struts框架中的一部分,用于简化Java Web应用程序开发中的视图层构建。Struts标签库提供了一组预定义的JSP标签,这些标签有助于开发者更有效地处理常见的Web开发任务,如表单处理、数据...

    Struts标签库 Struts 标签库

    Struts2标签库是Java开发Web应用程序时常用的一个强大工具,尤其在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。Struts2框架提供了丰富的自定义标签库,极大地简化了视图层的开发,使得开发者...

    struts logic:iterater 换行

    在探讨“struts logic:iterater换行”的知识点时,我们首先需要理解Struts框架以及其内嵌的逻辑标签库(Logic Tag Library)中的`&lt;logic:iterate&gt;`标签的使用方式,尤其是如何在迭代过程中实现换行效果。下面将详细...

Global site tag (gtag.js) - Google Analytics