0

Wicket でFormインスタンスを無効にすると、入力フィールドは完全に無効になりますが、送信ボタンも無効にできません。

送信ボタンを追加する必要なしに、送信ボタンも無効にする方法はありwicket:idますか?

4

2 に答える 2

0

を自動的に作成することでこの問題を解決しました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;
    }
}
于 2014-06-05T10:29:22.280 に答える