JSF - привязка значения к флажкам, построенным динамически - PullRequest
0 голосов
/ 21 августа 2011

Я нашел учебник, очень близкий к тому, что я хочу сделать: http://www.andygibson.net/blog/tutorial/binding-dynamic-multi-select-checkboxes-with-jsf/

Единственное изменение состоит в том, что я устанавливаю свои флажки в своем компоненте поддержки, а не в своем файле .xhtml, но атрибуты 'value' установлены неправильно.

фрагмент из моего файла .xhtml:

<h:form>
<h:panelGrid binding="#{myBean.myGrid}"></h:panelGrid>
<h:commandButton id="submit" type="submit">
</h:form>

фрагмент из myBean:

public HtmlPanelGrid getMyGrid()
{
  resultGrid = new HtmlPanelGrid();
  resultGrid.setColumns(2)
  List children = resultGrid.getChildren();

  FacesContext myFacesInstance = FacesContext.getCurrentInstance();
  Application myApp = myFacesInstance.getApplication();
  ExpressionFactory expFactory = myApp.getExpressionFactory();

  SelectItem tempSelectItem;
  String valuStringExpression;
  ValueExpression valExpression;

  //create panel for the checkboxes
  HtmlSelectManyCheckbox checkboxPanel = new HtmlSelectManyCheckbox();
  checkboxPanel.setLayout("pageDirection");

   List<SelectItem> checkChoiceList = new ArrayList<SelectItem>();

   for (int i=0;i<numChoices;i++)
   {
    valStringExpression = "#{myBean.responseValue["+i+"]}";
valExpression = expFactory.createValueExpression(myFacesInstance.getELContext(), valStringExpression, String.class);        
    tempSelectItem = new SelectItem(valExpression,choiceLabels.get(i));
    checkChoiceList.add(tempSelectItem);
   }

  UISelectItems checkboxList = new UISelectItems();
  checkboxList.setValue(checkChoiceList);
  checkboxPanel.getChildren().add(checkboxList);

  children.add(checkboxPanel);

return resultGrid;
}

Проблема в том, что атрибут значения каждого флажка не отображается должным образом на мое "# {myBean.responseValue [" + i + "]}".

Если я открою «Просмотр источника» с веб-страницы, значение тега флажка будет отображаться как:

value="ValueExpression[#{myBean.responseValue[0]}]"

Я часами гуглял, и я в тупике. Любая помощь или идеи с благодарностью !!

1 Ответ

0 голосов
/ 21 августа 2011

Первый аргумент конструктора SelectItem ожидает фактическое значение элемента выбора, а не выражение некоторого значения. Исправьте это соответственно:

Object value = valExpression.getValue(elContext);
tempSelectItem = new SelectItem(value, choiceLabels.get(i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...