如何使Struts无线电标签创建一个垂直的单选按钮列表

时间:2011-04-27 19:07:34

标签: java html css jsp struts2

我正在使用一个struts无线电标签,该标签正在填充一个包含两个字段的对象列表:

class MyAction {
     List<MyObject> myList;
     String selectedId
     public String execute() {
         ...
         myList = new ArrayList<MyObject>();
         myList.add(new MyObject("1","first object");
         myList.add(new MyObject("2","second object");
         myList.add(new MyObject("3","second object");
         ...
     }

     // Getters and Setters for myList & selectedId
     ...
}

class MyObject {
    String id;
    String name;

    MyObject(String id, String name) {
         this.id = id;
         this.name = name;
    }
    // Getters and Setters for id & name
    ...
}

这是我在页面上用来显示单选按钮列表的内容

<s:radio key="selectedId" list="myList" listKey="id" listValue="name"/>

然而,这会产生单选按钮的水平列表。我尝试为他们添加一个CSS样式:

<style>
    .vertical input { display: block; }
</style>

但这会导致标签和单选按钮显示在不同的行上,而不是同一行上的单选按钮和标签:

  • 第一个对象
  • 第二个对象
  • 第三个对象

    我想要的是:

  • 第一个对象
  • 第二个对象
  • 第三个对象
  • 4 个答案:

    答案 0 :(得分:12)

    它实际上很简单,我的意思是使用主题simple:)

    <s:iterator value="myList"> 
      <s:radio theme="simple" name="someNameToSubmit" list="#{id:name}"/><br>
    </s:iterator> 
    

    这会将name作为标签,id作为要提交的媒体

    答案 1 :(得分:4)

    经过一些谷歌搜索后......我找到了一些解决方案:

    1. 修改扩展主题并修改单选按钮的struts FTL:Instructions here。这对我来说似乎有些过分 - 或者至少我太懒了:)

    2. 使用迭代器标记,遍历每个列表项,并为每个列表元素输出一个单选按钮和换行符。答案来自here

    3. 我选择了第二种选择(因为我主要是懒惰的),虽然选项一会很好。

      以下是我的struts标签现在的样子:

      <s:iterator value="myList"> 
          <s:radio key="selectedId" list="{myObject}" listKey="id" listValue="name"/><br/> 
      </s:iterator> 
      

      因此迭代器在List上工作,因此您将radio标签的list属性设置为仅包含当前myObject的列表。 listKey和listValue则是myObject.id和myObject.name

    答案 2 :(得分:3)

    我有一个简单的解决方案。在列表中,将<br>添加到每个项目,例如

    first object <br> 
    

    虽然它看起来像黑客。

    答案 3 :(得分:0)

    您也可以在Java代码中使用地图。这也有摆脱MyObject类的好处。类似的东西:

    class MyAction {
         Map<String, String> myMap;
         String selectedId;
         public String execute() {
             // ...
             myMap = new HashMap<String, String>();
             myMap.put("1","first object");
             myMap.put("2","second object");
             myMap.put("3","second object");
             // ...
         }
    
         // Getters and Setters for myMap & selectedId
         // ...
    }