我必须将无线电和chechbox控件放在primefaces的2.2.1数据表中,而不是作为选择模式控件。我想将这些控件绑定为辅助bean的值。
例如:
A有一些配置的列表,在该列表中,一次只能有一个配置(radiobox),但每个配置都可以是活动的(selectbox)。
数据表不必是可编辑的,因为我将在另一个窗口中更改值。只有控件应该在数据表中。
这可能吗?
答案 0 :(得分:2)
是的,我绝对有可能在我的数据表中一直这样做。但是,您需要记住每一行都需要识别。您可以使用侦听器的对象或参数执行此操作:
//Backing Bean
@ViewScoped
public class TestBean
{
private ArrayList<Element> elements;
TestBean(){...}
public ArrayList<Element> getElements(){...} //Initialize things here
public class Element
{
/* getter/setter and initialization assumed */
private boolean selected;
private String radioSelection = "one";
private String[] radioChoices = new String[]{"one", "two", "three"};
public void selectMe(ActionEvent evt)
{
System.out.println("Selected -> " + this);
}
}
}
// HTML
<p:dataTable value="testBean.elements" var="element">
<p:column>
<p:commandButton value="Select" actionListener="#{element.selectMe}"
</p:column>
<p:column>
<h:selectBooleanCheckbox value="#{element.selected}" />
</p:column>
<p:column>
<h:selectOneRadio value="#{element.radioSelection}">
<f:selectItems
value="#{element.radioChoices}"
var="item"
itemLabel="#{item}"
itemValue="#{item}"
/>
</h:selectOneRadio>
</p:column>
</p:dataTable>
您可以(并且可能希望)使用元素中的ID或您喜欢的模式。关键是要记住每一行都有自己的id,你要创建一组元素,而不是单个元素。这就是你最有可能被束缚的地方。看看每个按钮是如何成为一等公民,你应该能够随心所欲地使用它。
编辑: 我添加了一个Radio / Checkbox示例。听起来你是JSF的新手,所以我建议你阅读SelectItem类并运行组合框等工作方式。要记住的关键(正如我在上面强调的那样)是你渲染了很多组件,所以如果你共享一个值,它很容易导致你不想要的行为。封装所有内容并且通常处于良好状态。)您还可以将绑定视为可能的解决方案。这一切都取决于你宁愿编写代码的地方。