Primefaces数据表中的Radio和Checkbox

时间:2011-12-01 16:01:31

标签: java jsf primefaces

我必须将无线电和chechbox控件放在primefaces的2.2.1数据表中,而不是作为选择模式控件。我想将这些控件绑定为辅助bean的值。

例如:

A有一些配置的列表,在该列表中,一次只能有一个配置(radiobox),但每个配置都可以是活动的(selectbox)。

数据表不必是可编辑的,因为我将在另一个窗口中更改值。只有控件应该在数据表中。

这可能吗?

1 个答案:

答案 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类并运行组合框等工作方式。要记住的关键(正如我在上面强调的那样)是你渲染了很多组件,所以如果你共享一个值,它很容易导致你不想要的行为。封装所有内容并且通常处于良好状态。)您还可以将绑定视为可能的解决方案。这一切都取决于你宁愿编写代码的地方。