JSF selectManyCheckbox - PullRequest
       10

JSF selectManyCheckbox

2 голосов
/ 28 октября 2009

Мне тяжело с selectManyCheckbox. По сути, я делаю загрузку списка категорий в контроллере типа selectManyCheckbox (делали это либо со списком, либо со списком с convertEntity). Моя проблема с выбранными элементами (value = "# {cardListProvider.categoriesHolder.selectedCategories}"). После некоторого чтения я понимаю, что это также должен быть список, но какой? И как я могу установить выбранные категории? Я не сохраняю их в БД, но мне нужно выполнить с ними какое-то действие!

Вот что у меня есть:

    <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 ]

4 голосов
/ 28 октября 2009

Вы можете привязать массив 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.
0 голосов
/ 08 декабря 2009

Я вижу, что вы используете Seam, поэтому нет необходимости использовать Strings или какой-либо примитивный тип, вы можете привязать его непосредственно к List Вам просто нужно добавить еще один тег в ваш компонент selectManyCheckbox, который автоматически сделает все.

Лучше, чем делать все самостоятельно, см. Документацию Seam

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

...