如何在selectManyCheckbox上实现“全选”

时间:2016-01-15 09:57:53

标签: jsf selectall selectmanycheckbox selectbooleancheckbox

我想设置selectManyCheckbox的复选框以检查条件是否为真“#{myBean.isCondition}”:

MyBean.java

public class MyBean{
  private boolean isCondition;
  ...

  public boolean isCondition{
      return isCondition;
  }
  ...
}

my_page.jspx:

<h:selectManyCheckbox 
    layout="pageDirection"
    label="#{messages['numsTelephone.label']}"
    value="#{listSelected}">
    <s:selectItems var="clientTelephone" 
                value="#{list}"
                label="#{clientTelephone}" />
</h:selectManyCheckbox>

我需要知道它是否存在类似

的内容
checked = "#{myBean.isCondition}"

我可以在我的selectManyCheckbox块中添加?或者我应该使用javascript吗?

欢迎任何其他解决方案。

我的另一个问题是如果选中一个复选框,如何将myBean.isCondition设置为true?

谢谢,

1 个答案:

答案 0 :(得分:1)

在&#34;全选&#34;中使用<f:ajax>复选框并在侦听器方法中执行选择作业,然后重新呈现复选框。

开球示例:

<h:form>
    <h:selectBooleanCheckbox value="#{bean.selectAll}">
        <f:ajax listener="#{bean.onSelectAll}" render="items" />
    </h:selectBooleanCheckbox>
    <h:selectManyCheckbox id="items" value="#{bean.selectedItems}">
        <f:selectItems value="#{bean.availableItems}" />
    </h:selectManyCheckbox>
</h:form>

@Named
@ViewScoped
public class Bean implements Serializable {

    private boolean selectAll; // +getter +setter
    private List<String> selectedItems; // +getter +setter
    private Map<String, String> availableItems; // +getter (no setter necessary)

    @PostConstruct
    public void init() {
        availableItems = new LinkedHashMap<String, String>();
        availableItems.put("Foo label", "foo");
        availableItems.put("Bar label", "bar");
        availableItems.put("Baz label", "baz");
    }

    public void onSelectAll() {
        selectedItems = selectAll ? new ArrayList<>(availableItems.values()) : null;
    }

    // ...
}