我正在Web应用程序中创建带有选择框的表单。我以下面描述的方式使用DropDownChoice + ChoiceRenderer组合。它工作正常,但有一点-
in不预先选择默认值。
我已经为此奋斗了很长时间。我在互联网上找到了几个可以正常工作的示例,但对我却不起作用。
我的代码库如下所示(不相关的部分已被省略或简化以提高清晰度):
商业实体
public class MultivalueType
{
private Long id;
private String label;
private String description;
public MultivalueType(Long id, String label, String description)
{
this.id = id
this.label = label;
this.description = description;
}
public Long getId()
{
return id;
}
public String getLabel()
{
return label;
}
public String getDescription()
{
return description;
}
}
public class PropertySettings
{
private Long id;
private String property;
private MultivalueType multivalueType;
public PropertySettings(Long id, String property, MultivalueType multivalueType)
{
this.id = id;
this.property = property;
this.multivalueType = multivalueType;
}
public MultivalueType getMultivalueType()
{
return multivalueType;
}
}
道
public class PropertySettingsDao
{
...
@Override
public PropertySettings load(Long id)
{
String query = " ... query ... ";
Object[] params = { id };
return getJdbcTemplate().queryForObject(query, params, getRowMapper());
}
...
}
表格类
PropertySettings property = propertySettingsDao.load(propertyId);
IModel<PropertySettings> formModel = new CompoundPropertyModel<PropertySettings>(property);
Form<PropertySettings> form = new Form<PropertySettings>("editPropertyForm", formModel)
{
@Override
protected void onSubmit()
{
PropertySettings propertySettings = this.getModelObject();
...
}
};
form.add(createEnumSelectbox(multivalueTypeDao, new PropertyModel<MultivalueType>(property, "multivalueType"), "multivalueType", true));
add(form);
创建选择框
protected DropDownChoice<MultivalueType> createEnumSelectbox(DaoForEntityWithSurrogateKey<MultivalueType> dao, IModel<MultivalueType> model, String componentName, boolean required)
{
// create the model
IModel<List<MultivalueType>> choices = createModelForListView(dao);
// prepare the select-box renderer
ChoiceRenderer<MultivalueType> renderer = new ChoiceRenderer<MultivalueType>("label", "id");
// create the select-box component
DropDownChoice<MultivalueType> selectBox = new DropDownChoice<MultivalueType>
(
componentName,
model,
choices,
renderer
);
// mark the select-box as a required form field
selectBox.setRequired(required);
return selectBox;
}
protected IModel<List<MultivalueType>> createModelForListView(final DaoForEntityWithSurrogateKey<MultivalueType> dao)
{
return new LoadableDetachableModel<List<MultivalueType>>()
{
@Override
protected List<BO> load()
{
return dao.loadAll();
}
};
}
请注意,我将默认的MultivalueType实例(冗余地)设置为Form组件的CompundPropertyModel和直接设置为DropDownChoice组件的模型。根据我在Internet上的发现,这足以使选择框在页面加载时预选择相应的值,但它不起作用。
我已经验证了Form组件(从DAO获得)中的属性变量确实包含有效数据。
还要注意,除了预选之外,其他所有方法都工作正常-我在表单的onSubmit方法中正确填充了propertySettings变量。
我终于设法找到了问题。
我已经意识到,当我显示表单时,Wicket会记录以下警告:
Model returned object ... which is not available in the list of selected objects.
根据该错误消息,我发现,为了使默认选项有效,业务实体必须重写equals方法(请参阅相应的JIRA故障单)。至少在我正在使用的Wicket版本1.5.4中。
希望这可以帮助其他会遇到相同问题的人!
我一直在试图调试为什么我的DropDownChoice在一个简单的表单中只有下拉和提交按钮,但几个小时来没有正常工作。
问题内容: 有什么明显的方法可以在Wicket DropDownChoice的选项列表中添加分隔符?就我而言,我在数据源中填充了两种类型的域对象。我想我可以去手动将某种虚拟域对象添加到选择列表中,但是感觉很难看。 例: 当前代码(不带分隔符)如下所示: 问题答案: 请参阅http://www.wicket-library.com/wicket- examples-6.0.x/compref/wic
EDIT做了一些更多的测试:当我只配置secure-annotations=“enabled”时,基于角色的安全性工作。此外,配置pre-postannotations=“enabled”时,既不安全也不预授权。当我只配置前-后注释时,它仍然不起作用。 编辑2 更多的测试:只有secured_annotations=“enabled”,对channelservice的调用通过Cglib2AopPr
问题内容: 我有以下测试: 但是JUnit报告说,测试失败了,尽管它按预期方式抛出。 我是否需要配置其他东西才能运行此程序? 我现在用 当我删除前缀时,仍然出现错误。 我得说我是在Eclipse上运行这些测试,但它配置为使用JUnit 4 Runner。 问题答案: 问题是,嵌套测试的类是的扩展。由于这是JUnit 3样式,因此注释不起作用。 现在,我的测试班是一个单独的班。
问题内容: 我想测试一种情况,但是我需要添加一个虚拟数据行来测试假设。因此,根据此SELECTINTO的mySQL手册页,我的查询是正确的: 但是我收到以下错误消息: “您的SQL语法有误;请在与MySQL服务器版本相对应的手册中查找在’INTO course.sections_rfip(SectionID,CourseID,SectionNumber,Term,学分,第1行的’附近使用的正确语法
我有几个复选框。基于JSON响应(通过ajax-requests加载数据),我使用.prop()函数设置和重置复选框的默认值。问题是,如果我手动改变它们,它们显然不会改变这种行为。我不能通过$('#checkbox:checked').val()传递复选框的值,控制台日志显示为'undefined'。这是因为.prop()函数吗?如何获取选中复选框的值? 如果你需要更多的信息,我很乐意提供。这里有