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

pla*_*mbo 6 html css java 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
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

<s:radio key="selectedId" list="myList" listKey="id" listValue="name"/>
Run Code Online (Sandbox Code Playgroud)

但是,这会生成单选按钮的水平列表.我尝试为他们添加一个CSS样式:

<style>
    .vertical input { display: block; }
</style>
Run Code Online (Sandbox Code Playgroud)

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

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

    我想要的是:

  • 第一个对象
  • 第二个对象
  • 第三个对象
  • anu*_*anu 12

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

    <s:iterator value="myList"> 
      <s:radio theme="simple" name="someNameToSubmit" list="#{id:name}"/><br>
    </s:iterator> 
    
    Run Code Online (Sandbox Code Playgroud)

    这将name作为标签和id要提交的属性


    pla*_*mbo 5

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

    1. 修改扩展主题并修改单选按钮的struts FTL:这里的说明。这对我来说似乎有点矫枉过正——或者至少我太懒了:)

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

    我选择了选项二(因为我主要是懒惰),尽管选项一会是一个很好的练习。

    这是我的 struts 标签现在的样子:

    <s:iterator value="myList"> 
        <s:radio key="selectedId" list="{myObject}" listKey="id" listValue="name"/><br/> 
    </s:iterator> 
    
    Run Code Online (Sandbox Code Playgroud)

    所以迭代器在一个 List 上工作,所以你将 radio 标签的 list 属性设置为一个只包含当前 myObject 的列表。listKey 和 listValue 然后是 myObject.id 和 myObject.name