繁体   English   中英

如何让 Struts 单选标签创建单选按钮的垂直列表

[英]How to make Struts radio tag create a vertical list of radio buttons

我正在使用一个带有两个字段的对象列表填充的 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>

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

  • 第一个 object
  • 第二 object
  • 第三 object

    我想要的是:

  • 第一个 object
  • 第二 object
  • 第三 object
  • 它实际上很简单,我的意思是使用simple的主题:)

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

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

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

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

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

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

    这是我的 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

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

    first object <br> 
    

    它虽然看起来像一个黑客,但它可以工作。

    您也可以在 Java 代码中使用 map。 这也将具有摆脱MyObject class 的好处。 就像是:

    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
         // ...
    }
    

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM