JSF selectManyCheckbox

时间:2009-10-28 11:42:42

标签: jsf seam

我在使用selectManyCheckbox时遇到了困难。 基本上我正在做的是在selectManyCheckbox类型控制器中加载类别列表(使用List或带有convertEntity的List完成此操作)。我的问题在于所选元素(value =“#{cardListProvider.categoriesHolder.selectedCategories}”)。经过一些阅读后,我明白它也必须是一个列表,但是什么样的?如何设置所选类别?我不是将它们保存在DB中但是我需要在bean中运行一些操作!

这就是我所拥有的:

    <h:selectManyCheckbox id="supportCategoryCardFilter"
value="#{cardListProvider.categoriesHolder.selectedCategories}" styleClass="greyText" required="false" >

             <s:selectItems var="filterList" value="#{cardListProvider.categoriesList}" label="#{filterList.label}" />

             <a:support id="supportCategoryCardFilter2" event="onchange"
reRender="someHolder, categoriesPanel" eventsQueue="onchange" action="#{cardListProvider.findCards(cardListProvider.categoriesHolder.selectedCategories)}" />

    </h:selectManyCheckbox>

我浪费了几个小时......有人能帮帮我吗? 谢谢

2 个答案:

答案 0 :(得分:4)

您可以绑定到String[]数组,如下所示:

public class CheckSelector {
  private String[] chosen;

  public String[] getChosen() { return chosen; }
  public void setChosen(String[] chosen) { this.chosen = chosen; }

  public SelectItem[] getChoices() {
    return new SelectItem[] { new SelectItem("1"), new SelectItem("2"),
        new SelectItem("3") };
  }
}

selectManyCheckbox的值应绑定到chosen。或者,您可以使用List

public class CheckSelector {
  private List<String> chosen;

  public List<String> getChosen() { return chosen; }

  public void setChosen(List<String> chosen) { this.chosen = chosen; }

  public List<SelectItem> getChoices() {
    return Arrays.asList(new SelectItem("1"), new SelectItem("2"),
        new SelectItem("3"));
  }
}

价值支持的确切规则列在javadoc

  • 如果组件附加了Converter,请使用它。
  • 如果没有,请查找值ValueExpression(如果有)。 ValueExpression必须指向以下内容:
    • 基元数组(例如int[])。查找已注册的类Converter以获取此基本类型。
    • 一组对象(例如Integer[]String[])。查找已注册的基类Converter以获取基础元素类型。
    • A java.util.List。假设元素类型为java.lang.String,因此不需要转换。
  • 如果由于任何原因无法找到Converter,请假设该类型为String数组。

答案 1 :(得分:0)

我看到你正在使用Seam所以不需要使用Strings或任何原始类型,你可以直接绑定到List。您只需在selectManyCheckbox组件中添加另一个标签,它将自动完成所有操作。

比自己做的更好,查看Seam文档

http://docs.jboss.org/seam/2.2.0.GA/reference/en-US/html/controls.html#d0e28378