Language
オブジェクト全体を、使用可能なアイテムと選択したアイテムの両方として提供する必要があります。また、オブジェクトとConverter
の間で変換するを作成する必要があります。これは、HTML出力とHTTPリクエストパラメータがすべてであるため必須です。Language
String
String
オブジェクトLanguage
に2つのプロパティがcode
ありname
、次のようなアプリケーションスコープのBeanがあるとします。
@ManagedBean
@ApplicationScoped
public class Data {
private List<Language> languages;
@PostConstruct
public void init() {
languages= new ArrayList<Language>();
languages.add(new Language("en", "English"));
languages.add(new Language("hi", "Hindi"));
languages.add(new Language("te", "Telugu"));
// ...
}
public List<Language> getLanguages() {
return languages;
}
}
次に、次のように使用できます。
<h:selectManyCheckbox value="#{bean.selectedLanguages}" converter="languageConverter">
<f:selectItems value="#{data.languages}" var="language"
itemValue="#{language}" itemLabel="#{language.name}" />
</h:selectManyCheckbox>
この豆で
@ManagedBean
@ViewScoped
public class Bean {
private List<Language> selectedLanguages;
// ...
}
そしてこのコンバーター
@FacesConverter("languageConverter")
public class LanguageConverter implements Converter {
@Override
public String getAsString(FacesContext context, UIComponent component, Object object) {
return ((Language) object).getCode();
}
@Override
public Object getAsObject(FacesContext context, UIComponent component, String submittedValue) {
List<Language> languages = (List<Language>) context.getApplication().evaluateExpressionGet(context.getELContext(), "#{data.languages}", List.class);
for (Language language : languages) {
if (language.getCode().equals(submittedValue)) {
return language;
}
}
return null;
}
}