我有一个{
"name": "BURGER KING",
"phone": "+(1)-(403)-2153451",
"categories": ["fast food", "restaurant"],
"classifications": [
{
"code": "RESTAURANT",
"names": [
{
"nameLocale": "en-US",
"name": "restaurant"
}, {
"nameLocale": "en-US",
"name": "fast food"
}
]
}
],
"location": "51.06652,-114.10822"
}
"msg":"Error parsing JSON field value. Unexpected OBJECT_START at [122], field=classifications"
,上面有两个DropDownChoice
。当我选择应设置为OnChangeAjaxBehavior
的值2时,在显示DropDownChoice
之前将第二次禁用,并在服务器日志中看到AccessDeniedPage
。在Wicket 6和7中有此功能。
有什么解决方法吗?
以下代码:
选择了私有整数;
ListenerNotAllowedInvocationException
我尝试禁用与组件具有相同条件的行为之一,但是我没有用。
public HomePage(final PageParameters parameters) {
super(parameters);
final DropDownChoice<Integer> ddc = new DropDownChoice<Integer>("ddc", new PropertyModel(this, "selected"), Arrays.asList(1,2,3)){
@Override
protected void onConfigure() {
super.onConfigure();
setEnabled(!Objects.equals(getModel().getObject(), 2));
}
};
ddc.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
art.add(getComponent());
saveToDb(model.getObject);
}
});
ddc.add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget art) {
art.add(getComponent(), otherComponent);
}
});
ddc.setOutputMarkupId(true);
add(ddc);
}
或者这样:
@Override
public boolean isEnabled(Component component) {
return !Objects.equals(component.getDefaultModelObject(), 2);
}
答案 0 :(得分:0)
问题如下:
2
,并在禁用状态下重新渲染DropDownChoice 为什么您需要在同一DropDownChoice上使用2个OnChangeAjaxBehaviors?
一种解决方案是通过对两种Ajax行为都使用AjaxChannel.ACTIVE来防止第二次Ajax调用。如果此ajax通道上有活动的Ajax调用,这将告诉Wicket JS不执行第二个Ajax调用。
更新: 另一种方法是重写Behavior#isEnabled()并检查是否存在名称为ddChoice#getInputName()的请求参数,并且其值为2。如果是这种情况,则返回true,否则调用super.isEnabled()。 / p>