2012-05-09 4 views
3

私の見解では、フォームに入力されたデータを保存するのにStudentModelBeanを使用しています。私のフォームのこの部分を考えてみましょう:selectManyCheckboxで選択したデータを別のオブジェクトに保存する方法はありますか?

<h:selectManyCheckbox value="#{}"> 
<f:selectItem itemLabel="English" itemValue="English" /> 
    <f:selectItem itemLabel="Hindi" itemValue="Hindi" /> 
    <f:selectItem itemLabel="Telugu" itemValue="Telugu" /> 
</h:selectManyCheckbox> 

私の要件は、私は、各LanguagesオブジェクトのlanguageNameプロパティに選択した各項目の値を格納する必要があるということです。最後に、私はそれらをListオブジェクトで取得する必要があります。どうすればこれを達成できますか?

答えて

9

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つのプロパティ codenameがあり、アプリケーションは次のようになり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; 
    } 

} 
+0

ありがとうございます。それは私をたくさん助けました。 –

+0

evaluateExpressionGetはJSF1.2のList.classと連携していません – Beginner

+0

@Beginner:さらに、evaluateExpressionGet()メソッド全体はJSF 1.2では使用できません。これはJSF 2.0で追加されました。答えを探すときは、JSF 2.xの対象となる質問ではなく、JSF 1.xの対象となる質問を探すように注意してください。そうしないと、無限の混乱に陥るでしょう。 JSF 1.xと2.xは異なる世界です。 – BalusC

関連する問題