你看struts自带的例子就行了。那个挺好的

解决方案 »

  1.   

    html:select标记需要在html:form标记下,property必须为已定义的ActionForm中变量
    1.Action中传集合(List)
      List querykinds = queryKindProxy.getAllQueryKind();
      request.setAttribute("querykinds" , querykinds);
    querykinds集合中包含queryKind BEAN, queryKind BEAN中含有两个属性id, name.
    2.在JSP中引用
    <html:select property="querykind" styleClass="input" style="width:140px">
        <html:options collection="querykinds" property="id"  labelProperty="name"/>
    </html:select><html:options>标记中collection表示传来的集合名称,property表示option中的值,labelProperty表示option中的text
      

  2.   

    补充
    如果在request中保存了一个LabelValueBean格式的Collection
    可以简单的调用<html:optionsCollection>这个标签,使用起来更方便如
    Collection colCountry;//如("中国","cn")...  [label,value]
    request.setAttribute("colCountry",colCountry);
    ///////////view.jsp
    <html:select property="countryid">
        <html:optionsCollection name="colCountry"/>
    </html:select>///////////////////////
    就会给你populate selectlist啦
      

  3.   

    已经搞定。谢谢各位。to NewTypeQ(BenQ):
    在struts中,只要在FormBean中有实现collection的接口的属性
    就可以了。我不愿看到request.setAttribute()这样的东西。
    然后直接可以在jsp中这么用:<html:select 
           property = "listvalue" size="<%= String.valueOf(form.getListSize()) %>">
       <html:optionsCollection name="ComA010F01" property="listBox" vlue="optionValue" label="optionLabel"/>
    </html:select> listvalue:是FormBean的一个属性,用来保存selected的值
    ComA010F01:是FormBean的名称
    listBox:是FormBean的一个属性,保存的是colletion
    optionValue:是数据保持bean的一个属性
    optionLabel:也是。
      

  4.   

    我不赞成你将collection的接口的变量放入FormBean的做法.
    一来程序中隐含了变量传递的过程,使程序不是很清晰易懂.
    二来collection的接口的变量通常只是给HTML控件赋值,而在FORM提交时,
    并不会用到集合变量,这样会给FormBean增加一些无用操作.
    用Request传参方式,只是在需要时使用,应是最简单的方式.欢迎讨论.
      

  5.   

    看看select标签和options标签的原理:
    select标签的property属性指定的是保存在当前page中的一个属性,这个属性是一个list,list中保存的内容是options标签生成的一系列选择框的value,也就是上面说的optionValue值,这个值指定了哪些按钮将被selected。
    options标签的name和property指定page的一个属性,属性为list类型,list中保存了一系列的bean对象,而value和label就是这个bean对象的两个属性,分别表示选择框的item的value和label。
    上面说listvalue是FormBean的一个属性,有些不明白,你的select标签没有指定FormBean,它是在options标签中指定的,那么listvalue怎么定位到FormBean呢?
      

  6.   

    补充:
      如是传数组或是集合(如ArrayList)中BEAN中只有一个变量,可以用如下方式使用
      <html:select property="tablename" styleClass="input">
         <html:options name="tablenames" labelName="tablenames"/>
      </html:select>
      
      tablenames为数组名称或集合参数名称
      

  7.   

    to occultme(神秘):
    select标签没有必要指定FormBean,
    在FormBean里getlistvalue()和setlistvalue()就可以了。to gdx(灵犀):
    1.我就是要屏蔽多一点的内容,让
    写jsp的人用最少的代码实现功能就可以了。
    2. 你可以看看
    http://jakarta.apache.org/struts/doc-1.0.2/userGuide/building_model.html
    关于ActionForm Beans的描述。
    事实上集合并不会被提交。
      

  8.   

    昨天要下班,思路有点乱。to gdx(灵犀):"二来collection的接口的变量通常只是给HTML控件赋值,而在FORM提交时,
    并不会用到集合变量,这样会给FormBean增加一些无用操作."你说的很对,在FORM提交时,并不会用到集合变量。
    既然不会用到,实际上是不存在集合变量。我想请教这样给FormBean增加了什么无用的操作?另外:我说不会提交是正确的,但是我说的要参见的文档跟提交不提交没关系。