Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在wicket中,如何创建未由组件层次结构/布局定义的放射组?_Java_Layout_Radio Button_Wicket - Fatal编程技术网

Java 在wicket中,如何创建未由组件层次结构/布局定义的放射组?

Java 在wicket中,如何创建未由组件层次结构/布局定义的放射组?,java,layout,radio-button,wicket,Java,Layout,Radio Button,Wicket,我正在使用Wicket,并希望使用HTML创建单选按钮网格,如下所示(外部列表将垂直显示,内部列表将水平显示) 组的数量是可变的-可以是ABC、ABCD、ABCDE等 我想把单选按钮垂直分组 <ul> <li> <ul> <li><input type="radio" name="A"></li> <li><input type="radio" name="B">

我正在使用Wicket,并希望使用HTML创建单选按钮网格,如下所示(外部列表将垂直显示,内部列表将水平显示)

组的数量是可变的-可以是ABC、ABCD、ABCDE等

我想把单选按钮垂直分组

<ul>
  <li>
    <ul>
       <li><input type="radio" name="A"></li>
       <li><input type="radio" name="B"></li>
       <li><input type="radio" name="C"></li>
    </ul>
  </li>
  <li>
    <ul>
       <li><input type="radio" name="A"></li>
       <li><input type="radio" name="B"></li>
       <li><input type="radio" name="C"></li>
    </ul>
  </li>
  <li>
    <ul>
       <li><input type="radio" name="A"></li>
       <li><input type="radio" name="B"></li>
       <li><input type="radio" name="C"></li>
    </ul>
  </li>
</ul>
这样做的问题是,我无法按照我想要的方式布置项目

还有别的办法吗?是否手动指定名称并收集结果

更新:我注意到
Radio
可以将
RadioGroup
作为参数。所以我们可以做一些类似的事情:

// create some groups
for (0..n) {
  RadioGroup group = new RadioGroup("myRadioGroup", new Model { .. } );
  groupArray.add(group)
}

//create a ListView for the RadioGroups so we can attach them to page
ListView radioListView = ListView("radioGroupList") { populate from groupArray }
add(radioListView);

// create our grid of radio buttons
// outer -> rows 
for (0..x) {
  // inner -> columns
  for (0..n)
    // supply group from our groupArray
    add( new Radio("myradio", new Model(1), groupArray.get(n) ));
  }
}
然后,我可以将
Radio
s和
RadioGroup
s独立于布局添加到表单中,这在分组方面具有所需的效果

<form>
  <span wicket:id="radioGroupList">
     <span wicket:id="radioGroup"/>
  </span>
  <ul> 
    <li><radio wicket:id="myradio"/></li>

但是现在,当我提交时,我得到了以下错误:

WicketMessage:为RadioGroup组件[2:tContainer:list:2:tPanel:myForm:orderedRadioGroupList:0:orderedRadioGroup]提交的http post值[radio33]是非法的,因为它不包含到RadioComponnet的相对路径。因此,RadioGroup组件无法解析非法值指向的选定无线电组件。一个可能的原因是组件层次结构在呈现和表单提交之间发生了变化

你知道这是什么意思吗

拼错的单词“componement”表明它不太常见

我正在使用Wicket 1.4.12


我发现这个Apache票证看起来是相关的:

您的组件层次结构是错误的。正如javadoc所说,无线电组件必须位于无线电组组件内部。由于嵌套了无线电组,因此必须确保添加的无线电组件放置在最内部的无线电组实例中。因此,您的标记应该如下所示:

<span wicket:id="group1">
    <span wicket:id="group2">
        <span wicket:id="group3">
            <ul>
                <li><input wicket:id="radio" type="radio"/>
                ...

  • ...

当前代码的问题在于,您使用的ListView从您的组中创建一个平面列表,而不是嵌套的列表。而且,您正在将您的收音机添加到组的层次结构之外。

我尝试了一下,得出了这个简单的解决方案: 干杯,安德烈

JAVA代码:

RadioChoice<String> choice = new RadioChoice<>(
    "logger", new PropertyModel<>(model, "impl"), dao.getAvailableLoggers()
);
choice.setSuffix("\n");
form.add(choice);
RadioChoice=newradiochoice(
“logger”,新的PropertyModel(model,“impl”),dao.getAvailableLogger()
);
choice.setSuffix(“\n”);
表格.加入(选择);
Wicket标记代码:

<style type="text/css">
    .nowrap, .nowrap label {
        display: inline-block;
    }
</style>

<div class="nowrap">
    <wicket:container wicket:id="logger">x</wicket:container>
</div>

.nowrap、.nowrap标签{
显示:内联块;
}
x

如果组数可变,如何为此创建嵌套的HTML标记?(可能有3,4,5,6,7.)。。组。您可以使用嵌套面板或片段执行此操作。下面是一个简单的面板示例:然后要创建嵌套,您可以将一个面板嵌套在另一个面板的“内部”标记中。最后,你会在内部标记中添加一个WebMarkupContainer,并将其他所有内容添加到该标记中。谢谢,我会照的。不过,这似乎有点不必要。这是放射组/无线电设计的一个缺点。不应将射线组设为组件,而应仅设为由无线电引用的对象。在1.6版本中需要重构的东西。我是按照你的建议来实现的,谢谢。不幸的是,我现在在嵌套片段周围有相当多的代码气味。从长远来看,我选择下拉列表可能更有意义,但至少在这个过程中我学到了一些东西。
<style type="text/css">
    .nowrap, .nowrap label {
        display: inline-block;
    }
</style>

<div class="nowrap">
    <wicket:container wicket:id="logger">x</wicket:container>
</div>