Java Wicket:如何实现未分组的单选按钮

Java Wicket:如何实现未分组的单选按钮,java,radio-button,wicket,html-table,radio-group,Java,Radio Button,Wicket,Html Table,Radio Group,我在一个表中有4列单选按钮。问题:在Wicket中,同一组的单选按钮需要分组在一个Wicket标记下,但在HTML中不可能这样做,因为表是逐行声明的 代码示例 <table id="table1"> <thead> <tr> <td>Group 1</td> <td>Group 2</td> <td>Gro

我在一个表中有4列单选按钮。问题:在Wicket中,同一组的单选按钮需要分组在一个Wicket标记下,但在HTML中不可能这样做,因为表是逐行声明的

代码示例

<table id="table1">
    <thead>
        <tr>
            <td>Group 1</td>
            <td>Group 2</td>
            <td>Group 3</td>
            <td>Group 4</td>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Value 1</td>
            <td>Value 2</td>
            <td>Value 3</td>
            <td>Value 4</td>
        </tr>
        <tr>
            <td><input type="radio" name="group1" wicket:id="g1b1"><\td>
            <td><input type="radio" name="group2" wicket:id="g2b1"><\td>
            <td><input type="radio" name="group3" wicket:id="g3b1"><\td>
            <td><input type="radio" name="group4" wicket:id="g4b1"><\td>
        </tr>
        <tr>
            <td><input type="radio" name="group1" wicket:id="g1b2"><\td>
            <td><input type="radio" name="group2" wicket:id="g2b2"><\td>
            <td><input type="radio" name="group3" wicket:id="g3b2"><\td>
            <td><input type="radio" name="group4" wicket:id="g4b2"><\td>
        </tr>
        <tr>
            <td><input type="radio" name="group1" wicket:id="g1b3"><\td>
            <td><input type="radio" name="group2" wicket:id="g2b3"><\td>
            <td><input type="radio" name="group3" wicket:id="g3b3"><\td>
            <td><input type="radio" name="group4" wicket:id="g4b3"><\td>
        </tr>
        <tr>
            <td><input type="radio" name="group1" wicket:id="g1b4"><\td>
            <td><input type="radio" name="group2" wicket:id="g2b4"><\td>
            <td><input type="radio" name="group3" wicket:id="g3b4"><\td>
            <td><input type="radio" name="group4" wicket:id="g4b4"><\td>
        </tr>
    </tbody>
</table>

第一组
第2组
第3组
第4组
值1
价值2
价值3
价值4
如您所见,这四个组是混合在一起的,如果我创建了一个HTML中不存在的组,就会抛出一个异常

如果我用相同的wicket id声明不同的组,则只考虑我添加的最后一个单选按钮


有人能帮我吗?

我想你可以用
RadioGroup
标签包装桌子(甚至是
tbody
标签)。
wicket:container
标记不会弄乱HTML结构。像这样:

<wicket:container wicket:id="group">
  <table id="table1">
    <!-- The rest of the table markup -->
  </table>
</wicket:container>

用四个嵌套的无线电组包装无线电,并将正确的组实例传递给每个无线电构造函数:

final RadioGroup<Integer> radioGroup1 = new RadioGroup<Integer>("radioGroup1", new Model<Integer>());
final RadioGroup<Integer> radioGroup2 = new RadioGroup<Integer>("radioGroup2", new Model<Integer>());
final RadioGroup<Integer> radioGroup3 = new RadioGroup<Integer>("radioGroup3", new Model<Integer>());
final RadioGroup<Integer> radioGroup4 = new RadioGroup<Integer>("radioGroup4", new Model<Integer>());

add(new FeedbackPanel("feedback"));
add(new Form<Void>("form")
    .add(radioGroup1
        .add(radioGroup2
            .add(radioGroup3
                .add(radioGroup4
                    .add(new Loop("loop", 10) {
                        @Override
                        protected void populateItem(LoopItem item) {
                            Model<Integer> itemModel = Model.of(item.getIndex());
                            item.add(new Radio<Integer>("radio1", itemModel, radioGroup1));
                            item.add(new Radio<Integer>("radio2", itemModel, radioGroup2));
                            item.add(new Radio<Integer>("radio3", itemModel, radioGroup3));
                            item.add(new Radio<Integer>("radio4", itemModel, radioGroup4));
                            item.add(new Label("label", itemModel));
                        }
                    })))))
    .add(new Button("submit") {
        @Override
        public void onSubmit() {
            info(Strings.join(", ",
                radioGroup1.getModelObject().toString(),
                radioGroup2.getModelObject().toString(),
                radioGroup3.getModelObject().toString(),
                radioGroup4.getModelObject().toString()));
        }
    }));



<div wicket:id="feedback"></div>

<form wicket:id="form">

  <div wicket:id="radioGroup1">
  <div wicket:id="radioGroup2">
  <div wicket:id="radioGroup3">
  <div wicket:id="radioGroup4">

    <table>
      <tr>
        <th>A</th>
        <th>B</th>
        <th>C</th>
        <th>D</th>
      </tr>
      <tr wicket:id="loop">
        <td><input type="radio" wicket:id="radio1"></td>
        <td><input type="radio" wicket:id="radio2"></td>
        <td><input type="radio" wicket:id="radio3"></td>
        <td><input type="radio" wicket:id="radio4"></td>
        <td><span wicket:id="label"></span></td>
      </tr>
    </table>

  </div>
  </div>
  </div>
  </div>

  <button wicket:id="submit" type="submit">Submit</button>

</form>
final RadioGroup RadioGroup 1=新的RadioGroup(“RadioGroup 1”,new Model());
最终射线组射线组2=新射线组(“射线组2”,新模型());
最终射线组射线组3=新射线组(“射线组3”,新模型());
最终射线组射线组4=新射线组(“射线组4”,新模型());
添加(新反馈面板(“反馈”);
添加(新表格(“表格”)
.add(第1组)
.add(第2组)
.add(第3组)
.add(第4组)
.添加(新循环(“循环”,10){
@凌驾
受保护的void populateItem(LoopItem项目){
Model itemModel=Model.of(item.getIndex());
添加(新收音机(“radio1”,itemModel,RadioGroup 1));
添加(新收音机(“radio2”,itemModel,RadioGroup 2));
添加(新收音机(“radio3”,itemModel,RadioGroup 3));
添加(新收音机(“radio4”,itemModel,RadioGroup 4));
添加(新标签(“标签”,itemModel));
}
})))))
.add(新建按钮(“提交”){
@凌驾
提交时公共无效(){
信息(Strings.join(“,”,
RadioGroup 1.getModelObject().toString(),
RadioGroup 2.getModelObject().toString(),
RadioGroup 3.getModelObject().toString(),
RadioGroup 4.getModelObject().toString());
}
}));
A.
B
C
D
提交

问题是我在同一个表中有4个不同的组(组1、组2等)。这样就把四个组合在一起了。对不起,我没注意到。因此,我不知道如何更改HTML结构(不使用表)。您好,感谢您的回复,这是一个很好的解决方案,但不适合我的情况:事实上,我简化了太多的HTML。我在第一列有一行标题。那么循环是不可能的,它将是那个标题。这就是我使用表格而不是列表的原因。为了更准确一点,我编辑了我的问题。我不知道我是否理解这个问题,但你也可以使用表格。我将答案编辑为使用
而不是
。好的,多亏了你,我解决了问题,但没有循环。无论如何,谢谢你,这真的帮了我大忙!