Model 维克特:如何;通行证;包装表单组件的AJAX行为?
如果我将输入包装在div中(与其他内容一起),Model 维克特:如何;通行证;包装表单组件的AJAX行为?,model,wicket,word-wrap,Model,Wicket,Word Wrap,如果我将输入包装在div中(与其他内容一起), 如何将添加到包装器中的beavior传递给该输入 示例: 组件HTML类似于.. 然后我想添加它,比如add(newmycomponent(“foo”,model”).add(newAjaxEventBehavior(“onupdate”){…}(但这不起作用,因为只有FormComponent可以接收(AjaxEventBehavior`s) 我假设我可以将此行为对象从包装器移动到输入,但不知道在哪里-是否有一些“构造后”侦听器? 还是应该完全不
如何将添加到包装器中的beavior传递给该输入 示例:
组件HTML类似于
..
然后我想添加它,比如
add(newmycomponent(“foo”,model”).add(newAjaxEventBehavior(“onupdate”){…}
(但这不起作用,因为只有FormComponent
可以接收(AjaxEventBehavior`s)
我假设我可以将此行为对象从包装器移动到输入,但不知道在哪里-是否有一些“构造后”侦听器?还是应该完全不同,比如将行为作为参数传递?
保持上述状态的原因是使其对组件的用户透明。您可以覆盖包装组件的
MarkupContainer\add(Behavior…behaviors)
方法。这当然意味着包装组件永远不会接收任何行为:
public class MyWrappingComponent extends Panel {
private TextField<?> field;
// Constructors and stuff..
@Override
public Component add(Behavior... behaviors) {
field.add(behaviors);
return this;
}
}
public abstract class WrapperComponent extends Panel
{
public WrapperComponent(String id)
{
super(id);
add(getInnerComponent("whateveridyouwant"));
//Other wrapper stuff
}
public abstract Component getInnerComponent(String id);
}
然后像这样使用它:
add(new MyWrappingBorder("border")
.add(new TextField<String>("input").add(/* the behaviors */)));
在包装器中包含一个返回组件的抽象方法
public abstract class WrapperComponent extends Panel
{
public WrapperComponent(String id)
{
super(id);
add(getInnerComponent("whateveridyouwant"));
//Other wrapper stuff
}
public abstract Component getInnerComponent(String id);
}
然后调用WrapperComponent将强制您重写getInnerComponent方法
WrapperComponent wrapperComponent = new WrapperComponent("wrapperComponent")
{
@Override
public Component getInnerComponent(String id)
{
TextField textfield = new TextField(id);
textField.add(behavior);
return textfield;
}
}
这种方式允许您在实际决定使用WrapperComponent时定义所需的innerComponent和行为。它提供了对innerComponent的更多控制
希望这对你有所帮助
public abstract class WrapperComponent extends Panel
{
public WrapperComponent(String id)
{
super(id);
add(getInnerComponent("whateveridyouwant"));
//Other wrapper stuff
}
public abstract Component getInnerComponent(String id);
}
WrapperComponent wrapperComponent = new WrapperComponent("wrapperComponent")
{
@Override
public Component getInnerComponent(String id)
{
TextField textfield = new TextField(id);
textField.add(behavior);
return textfield;
}
}