首页 > 解决方案 > Wicket 获取按钮组件文本

问题描述

我想获取按钮的文本,submitProceed并将在我的代码/逻辑中使用它。

是否可以获得按钮文本Submit?另外,我如何将其更改为Proceed

这就是我初始化按钮组件的方式:

private Component m_btnSubmit;

...

    private Component createForm() {
        Form<Void> result = new Form<>("form");

        ...

        result.add(m_btnSubmit = createSubmit("submit"));

        ...

        return result;
    }

    private Component createSubmit(String wicketId) {
        AjaxButton result = new AjaxButton(wicketId) {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onConfigure() {
                super.onConfigure();

                ...

                setOutputMarkupId(true);
            }

            @Override
            protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                super.updateAjaxAttributes(attributes);

                ...
            }

            @Override
            protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
                super.onSubmit(target, form);

                // TODO: Get button text here
                // Check button text if either `Submit` or `Proceed`
                // Action depending on button text (Also change button text)
            }

            @Override
            protected void onError(AjaxRequestTarget target, Form<?> form) {
                super.onError(target, form);

                ...
            }

        };

        ...

        return result;
    }

解决方案:

首先,我要感谢 @Andrea 和 @martin 的解决方案,我只是稍微调整一下以适应我现有的代码。

因为我需要一个包含文本的跨度,Submit然后再更改为Proceed......我需要在按钮标签内添加一个跨度,如下所示:

<button wicket:id="submit" type="button"><span wicket:id="labelSubmit">提交</span≶</button>

这个问题,我收到一个错误,似乎它不允许按钮具有嵌套组件。

错误是这样的: org.apache.wicket.markup.MarkupException: Expected close tag for '<button wicket:id="submit" type="button">' 可能尝试嵌入组件 '<span wicket: id="labelSubmit">' 在该组件的主体中丢弃其主体。

为了解决这个问题,我需要从 更改为buttona所以它看起来像这样:

<a wicket:id="submit" type="submit"><span wicket:id="labelSubmit">提交</span≶</a>

...
IModel m_labelModel = Model.of("Submit");
Label m_labelSubmit = new Label("labelSubmit", m_labelModel);
m_labelSubmit.setOutputMarkupId(true);
...

在我的按钮中onSubmit

m_labelModel.setObject("Proceed");              
target.add(this);

请注意,我只做了更改m_labelModel,但我需要添加当前按钮 ( this),以便更改将反映在 UI 中。

对于那些有相同问题或设置的人......希望这会有所帮助:)

标签: wicket

解决方案


您应该使用按钮的构造函数,该构造函数也将模型作为按钮的标签:

IModel labelModel = Model.of("Submit");
new Button<>("submit", labelModel);

比你可以使用模型来获取/设置这个值


推荐阅读