f:selectItems не отображает флажки в поле зрения
Я пытаюсь отобразить несколько флажков с помощью f:selectItems, но веб-страница просто не отображает флажки, как ожидалось. Пожалуйста, посмотрите на код ниже и дайте мне знать, что мне не хватает.
HTML:
<h:form prependId="false">
<table align="left" cellspacing="5">
<tr>
<td align="right" valign="top"><h:outputText value="#{msgs.interests}" /></td>
<td align="left" valign="top">
<h:selectManyCheckbox value="#{testBean.interests}">
<f:selectItems value="#{testBean.checkBoxItems}" />
</h:selectManyCheckbox>
</td>
</tr>
<tr>
<td align="right" valign="top"><h:commandButton value="#{msgs.save}" /></td>
<td align="left" valign="top"><h:commandButton value="#{msgs.cancel}" /></td>
</tr>
</table>
</h:form>
Управляемый Боб:
package com.jsf.ManagedBeans;
импорт javax.inject.Named; import javax.faces.bean.RequestScoped;
import javax.faces.model.SelectItem;
@Named ("testBean") @RequestScoped открытый класс TestBean {
private int[] interests; private SelectItem[] checkBoxItems = { new SelectItem("Dancing", "Dancing"), new SelectItem("Singing", "Singing"), new SelectItem("Reading", "Reading"), new SelectItem("Writing", "Writing") }; public SelectItem[] getCheckBoxItems() { return checkBoxItems; } public int[] getInterests() { return interests; } public void setInterests(int[] newValue) { interests = newValue; } }
1 ответ
Вы захотите использовать аннотации области CDI с аннотацией CDI @Named, а также убедиться, что CDI включен для проекта (файл WEB-INF/beans.xml существует).
Кроме того, добавьте оператор отладки в метод PostConstruct, чтобы подтвердить, что компонент создается. Этот метод запускается CDI автоматически после создания компонента. Его также можно использовать для инициализации полей компонента, поскольку он гарантированно будет запускаться один раз и только один раз за создание экземпляра, в отличие от конструктора класса.
package com.jsf.ManagedBeans;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import javax.faces.model.SelectItem;
@Named @RequestScoped public class TestBean {
private int[] interests;
private SelectItem[] checkBoxItems = {
new SelectItem("Dancing", "Dancing"),
new SelectItem("Singing", "Singing"),
new SelectItem("Reading", "Reading"),
new SelectItem("Writing", "Writing")
};
@PostConstruct public void init() {
System.out.println("testBean initialized");
}
public SelectItem[] getCheckBoxItems() {
return checkBoxItems;
}
public int[] getInterests() { return interests;
}
public void setInterests(int[] newValue) {
interests = newValue;
}
}