Wicket でForm
インスタンスを無効にすると、入力フィールドは完全に無効になりますが、送信ボタンも無効にできません。
送信ボタンを追加する必要なしに、送信ボタンも無効にする方法はありwicket:id
ますか?
Wicket でForm
インスタンスを無効にすると、入力フィールドは完全に無効になりますが、送信ボタンも無効にできません。
送信ボタンを追加する必要なしに、送信ボタンも無効にする方法はありwicket:id
ますか?
を自動的に作成することでこの問題を解決しましたButtons
。私WebApplication
の のinit()
-method では、自動リンクを作成する をインストールしAbstractMarkupFilter
ます。<input type="submit"/>
markupSettings.setMarkupParserFactory(new IMarkupParserFactory() {
public MarkupParser newMarkupParser(MarkupResourceStream resource) {
final MarkupParser parser = new MarkupParser(new XmlPullParser(), resource);
parser.appendMarkupFilter(new AbstractMarkupFilter() {
public MarkupElement nextTag() throws ParseException {
final ComponentTag tag = (ComponentTag)getParent().nextTag();
if (tag == null) {
return null;
}
if (tag.getId() != null) {
return tag;
}
if (!tag.isOpen() && !tag.isOpenClose()) {
return tag;
}
if (tag.getName().equals("input") && !(tag instanceof WicketTag)) {
final String type = tag.getAttributes().getString("type");
if ("submit".equals(type)) {
tag.enableAutolink(true);
tag.setId(WicketLinkTagHandler.AUTOLINK_ID);
tag.setAutoComponentTag(true);
tag.setModified(true);
}
}
return tag;
}
};
return parser;
}
});
IComponentResolver
次に、既存の の前に をインストールしAutoLinkResolver
ます。
final List<IComponentResolver> componentResolvers = getPageSettings().getComponentResolvers();
for (int i ; i < componentResolvers.size(); i++) {
final IComponentResolver resolver = componentResolvers.get(i);
if (resolver instanceof AutoLinkResolver) {
componentResolvers.add(i, new IComponentResolver() {
@Override
public boolean resolve(MarkupContainer container, MarkupStream markupStream, ComponentTag tag) {
if (tag.isAutolinkEnabled()) {
if (tag.getName().equals("input")) {
final String type = tag.getAttribute("type");
if ("submit".equals(type)) {
final Page page = container.getPage();
final String autoId = WicketLinkTagHandler.AUTOLINK_ID + Integer.toString(page.getAutoIndex());
if (tag.getId() == null) {
tag.setId(autoId);
tag.setAutoComponentTag(true);
}
container.autoAdd(new Button(autoId));
return true;
}
}
}
return false;
}
});
break;
}
}