浏览 8075 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-20
之所以要记录下来: 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的源码,其它类似源码应该都很简单了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-20
html:options确实不好用,以前还自己去实现了它的功能,当然,结果就是重复发明了轮子。
|
|
返回顶楼 | |
发表时间:2007-06-18
m:id 是什么玩意儿?struts html tags里貌似没有的说
|
|
返回顶楼 | |