Language
オブジェクトは、利用可能なアイテムと選択したアイテムの両方として提供する必要があります。 Language
オブジェクトとString
の間で変換するConverter
も作成する必要があります.HTML出力およびHTTP要求パラメータは1つで、すべてString
であるため、これは必須です。次のように次に、あなたがそれを使用することができます
@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>
あなた
Language
オブジェクトを2つのプロパティ
code
と
name
があり、アプリケーションは次のようになりBeanをスコープしたことと仮定すると
この豆と
@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;
}
}
ありがとうございます。それは私をたくさん助けました。 –
evaluateExpressionGetはJSF1.2のList.classと連携していません – Beginner
@Beginner:さらに、evaluateExpressionGet()メソッド全体はJSF 1.2では使用できません。これはJSF 2.0で追加されました。答えを探すときは、JSF 2.xの対象となる質問ではなく、JSF 1.xの対象となる質問を探すように注意してください。そうしないと、無限の混乱に陥るでしょう。 JSF 1.xと2.xは異なる世界です。 – BalusC