selectManyCheckboxタグに問題があります。
JBossPortal内でJSF1.1を使用しています(バージョン4.2だと思いますが、確かではありません)。
次のJSFマークアップがあります。
<h:selectManyCheckbox layout="lineDirection"
value="#{personBean.selectedPersonsLongArray}"
id="selectedPersons">
<f:selectItems value="#{personBean.persons}" />
</h:selectManyCheckbox>
(もちろん、フォームを送信するボタンがあります)。私の豆は次のようになります。
public class PersonBean {
private List<SelectItem> persons;
private List<SelectItem> selectedPersons = new ArrayList<SelectItem>(); // +getter +setter
private List<String> selectedPersonsStringList = new ArrayList<String>();// +getter +setter
private List<Long> selectedPersonsStringList = new ArrayList<Long>();// +getter +setter
private long[] selectedPersonsLongArray = new long[0];// +getter +setter
private String[] selectedPersonsStringArray = new String[0]; // +getter +setter
public void getPersons(){
if(persons == null){
List<Person> personsFromDb = // get from DB
persons = new ArrayList<Person>(personsFromDb.size());
for(Person person : personsFromDb){
// ID of a person is a long
persons.add(new SelectItem(person.getId(), person.getName()));
}
}
return persons;
}
public void setPersons(List<SelectItem> persons){
this.persons = persons;
}
...
}
Beanはセッションスコープであり、PersonのIdプロパティはタイプlong
です。タグの値をBeanにリストされているすべてのタイプにバインドしようとしました。selectedPersonLongArray
送信時に、「検証エラー」メッセージを除くすべてが表示されます。バインドすると、入力する必要がselectedPersonLongArray
あるというエラーが表示されます。selectedPersons
私が言ったように、Beanはセッションスコープであり、persons
リストがリクエスト間で変更されないことを再確認しました。これは、このタグの一般的な問題のようです。
何か案は?