java - Wicket 口顺序下拉

标签 java drop-down-menu wicket

在我的页面顶部,我想要一个下拉菜单来更改首选语言。如果更改,则页面将重新加载并使用所选语言呈现。 在我的解决方案中,语言不会立即加载。

@SuppressWarnings("serial")
public class CurrentLanguageDropdown extends LanguageDropDown {

private String sessionlanguage;
private IModel<String> model;

public CurrentLanguageDropdown(String id, Locale locale) {
    super(id, locale);
    this.sessionlanguage = locale.getCountry();
    GlobalAccountSession session = GlobalAccountSession.get();
    model = new SelectedLocaleModel("sessionlanguage", this, new     Model<Serializable>(session.getLocale()),
            locale.getCountry());
    setModel(model);
}

@Override
public void onSelectionChanged(String newSelection) {
    GlobalAccountSession session = GlobalAccountSession.get();
    model = new SelectedLocaleModel("sessionlanguage", this, new Model<Serializable>(session.getLocale()),
            newSelection);
}

@Override
protected boolean wantOnSelectionChangedNotifications() {
    return true;
}

String getSessionlanguage() {
    return sessionlanguage;
}

private class SelectedLocaleModel extends StringResourceModel {

    private String selectedValue = "";
    private Component parent;

    public SelectedLocaleModel(String resourceKey, Component parent, IModel<?> model, String selectedValue) {
        super(resourceKey, parent, model);
        this.selectedValue = selectedValue;
        this.parent = parent;
    }

    @Override
    public void setObject(java.lang.String object) {
        GlobalAccountSession session = GlobalAccountSession.get();
        Locale locale = new Locale(object.toString());
        session.setLocale(locale);
        selectedValue = locale.getLanguage();
    }

    @Override
    public String getObject() {
        GlobalAccountSession session = GlobalAccountSession.get();
        selectedValue = session.getLocale().getLanguage();
        return selectedValue;
    }
}
}

查看我的代码,我发现首先调用 getObject,然后调用 setObject。因此渲染似乎是在处理用户所做的更改之前完成的。

谁能告诉我我做错了什么?

最佳答案

您正在 onSelectionChanged 中创建一个新的模型对象。这违背了应该修改而不是替换的模型的目的。如果您需要创建新的模型对象,则还必须替换组件使用的模型(再次调用 setModel(model))。

关于java - Wicket 口顺序下拉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14599191/

相关文章:

java - 更新 firebase 实时数据库中键的值时出现问题

java - Wicket 替换 ListView 中的项目

php - 根据下拉选择调整查询

PHP-从数据库中获取并存储在下拉菜单html中

java - Wicket - DropDownChoice - 选项的标题(工具提示)

wicket - 在 Wicket 1.5 中重定向到外部非 Wicket 页面

Java 如何自动选中下面的复选框?

java - 使用 Java 保留文件创建时间

java - Android - 所有数据库操作都应该在一个线程中完成吗?

javascript - MEAN.js 的顶栏菜单 : Using icon/image instead of text for title