【问题标题】:Ajax radio buttons in Wicket 7Wicket 7 中的 Ajax 单选按钮
【发布时间】:2020-12-02 15:01:42
【问题描述】:

我创建了一个面板,我在其中尝试将实时 Ajax 行为应用于某些单选选项。

问题是我无法设置当前活动选项,在setter“setSelectedLang”中,参数总是为null,即使我点击不同的单选选项。怎么解决?

我正在运行 Wicket 7.5.0 版。

package xx.yy.admin

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.RadioChoice;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.PropertyModel;
import xx.yy.admin.Survey;
import xx.yy.admin.AjaxListener;

import java.util.Arrays;
import java.util.List;


public class LanguageSelectionPanel extends GenericPanel<Void> {


private static final String SVENSKA = "Sve";
private static final String ENGELSKA = "Eng";
private AjaxListener listener;
private Form<Void> form;
private List<String> languages = Arrays.asList(SVENSKA, ENGELSKA);
private Survey surveyModel;
private String selectedLang = "Sve";

private RadioChoice languageRadioChoice;

public SurveyLanguageSelectionPanel(String id, Survey survey, AjaxListener listener) {
    super(id);
    this.surveyModel = survey;
    this.listener = listener;
    initialize();
}

protected void initialize() {
    super.onInitialize();
    form = new Form<Void>("langform") {
        @Override
        protected void onSubmit() {
            info("Init : ");
        }
    };
    add(form);

    languageRadioChoice = getLanguageSelection();

    form.add(languageRadioChoice);
}

private RadioChoice getLanguageSelection() {
    RadioChoice<String> langRadioChoice = new RadioChoice<>("languages",
            new PropertyModel<>(this, "selectedLang"), languages);

    // Add Ajax Behaviour...
    langRadioChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
        protected void onUpdate(AjaxRequestTarget target) {
            listener.onUpdate(target);
        }
    });
    return langRadioChoice;
}



public void setSelectedLang(String selectedLang) {
    this.selectedLang = selectedLang;
}

public String getSelectedLang() {
    return selectedLang;
}

}

html代码:

<body>
<wicket:panel>

    <form style="" class="" wicket:id="langform">
        <wicket:enclosure child="languages">
            <span wicket:id="languages"></span>
        </wicket:enclosure>
        <br/>
        <hr/>
    </form>
</wicket:panel>
</body>
</html>

【问题讨论】:

  • 您好,代码不是很清楚。我看到你在构造函数中使用了 setSelectedLanguage 方法: this.selectedLanguage = this.setSelectedLanguage(surveyModel.getLanguage());但我在你的课上找不到。也许你的意思是方法 setSelectedLang 但最后一个不返回任何值,是无效的。
  • 我进行了编辑。
  • 感谢更新。尽管如此,您的 PropertyModel 使用“selectedLang”作为表达式,但真正的属性名称是“selectedLanguage”
  • 更新,同样的问题

标签: ajax wicket wicket-7


【解决方案1】:

您必须按照此处所述使用“AjaxFormChoiceComponentUpdatingBehavior”:

onchange get current value with radioChoice

langRadioChoice.add(new AjaxFormChoiceComponentUpdatingBehavior() {
        protected void onUpdate(AjaxRequestTarget target) {
            listener.onUpdate(target);
        }
    });

【讨论】:

    猜你喜欢
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    相关资源
    最近更新 更多