我有一个数组,其中包含Group
个对象的列表。我想将此列表设置为DropDownChoice
组件。但是,我想向最终用户显示Group
个对象的name属性,然后获取所选值的id属性以添加数据库。怎么办?
private List<Group> groupTypes;
DatabaseApp db = new DatabaseApp();
groupTypes = db.getGroups();
groupDropDownChoice = new DropDownChoice("type", groupTypes);
...
...
addUserForm.add(new Button("submit"){
@Override
public void onSubmit(){
Group group = (Group) groupDropDownChoice.getModelObject();
...
...
db.addUser(group.getId(), den, name, login, email, password1);
public List<Group> getGroups() throws SQLException{
List<Group> groups = new ArrayList<Group>();
try {
String query = "SELECT * FROM [GROUP]";
Statement statement = db.createStatement();
ResultSet result = statement.executeQuery(query);
while(result.next()){
int id = result.getInt("ID");
String name = result.getString("NAME");
groups.add(new Group(id, name));
}
result.close();
} catch (SQLException ex) {
throw new SQLException(ex.getMessage());
}
return groups;
}
答案 0 :(得分:1)
DropDownChoice
有另一个构造函数接受IChoiceRenderer
的附加参数,该参数允许控制显示的内容以及使用表单发回的内容。
请参阅this example。
在您的代码中,实现看起来大致类似于
private List<Group> groupTypes;
DatabaseApp db = new DatabaseApp();
groupTypes = db.getGroups();
groupDropDownChoice = new DropDownChoice("type", groupTypes, new IChoiceRenderer(){
@Override
public Object getDisplayValue(Object object) {
return ((Group) object).getName();
}
@Override
public String getIdValue(Object object, int index) {
return Integer.toString(index);
}
});
...
...
addUserForm.add(new Button("submit"){
@Override
public void onSubmit(){
Group group = (Group) groupDropDownChoice.getModelObject();
...
...
db.addUser(group.getId(), den, name, login, email, password1);
答案 1 :(得分:0)
您只是直接从群组列表中创建DropDownChoice
。在我看来,你真正想要的是一个群组列表的模型;见IModel
documentation。然后,您可以创建一个自定义模型,该模型仅返回组的名称而不是整个Group
对象。