gpt4 book ai didi

java - CompoundPropertyModel - 在渲染之前转换一个 boolean 值

转载 作者:搜寻专家 更新时间:2023-11-01 04:06:39 25 4
gpt4 key购买 nike

我正在使用 CompoundPropertyModel(通过 PropertyListView)打印对象(用户)的属性。

User 对象的属性之一是 boolean 值。我希望使用自定义转换来呈现 boolean 值(false -> “disabled”,true -> “enabled”)。

如何在不向 User 对象添加新方法的情况下实现这一点?

add(new PropertyListView<User>("users", new LoadableUsersModel()) {
@Override
protected void populateItem(ListItem<User> item) {
item.add(new Label("firstname"));
item.add(new Label("surname"));
item.add(new Label("username"));
item.add(new Label("email"));
item.add(new Label("active"));
}
});

最佳答案

有几种方法可以实现:

  • item 获取您的模型对象,并使用 if-else

    User user = item.getModelObject();
    item.add(new Label("active", user.isActive() ? "enabled" : "disabled"));
  • 实现一个 IConverter 并在其 convertToString() 方法中返回所需的值。在 LabelgetConverter() 方法的重写中返回转换器的一个实例。在这个例子中都是匿名类,最好将它们定义为独立的类,至少是转换器,并且有一个静态方法只使用一个实例。

    item.add(new Label("active"){
    public IConverter getConverter(Class type){
    return new IConverter(){
    public String convertToString(Object value, Locale locale){
    if (Boolean.TRUE.equals(value) { return "enabled"; }
    else if (Boolean.FALSE.equals(value) { return "disabled"; }
    else { return null; }
    }
    public Object convertToObject(String value, Locale locale){
    // Not needed, only used by FormComponents
    return null;
    }
    }
    }
    };
  • 使用 AbstractReadOnlyModel 返回所需的值,为其提供 active 属性或带有它的模型:

    PropertyModel pm = new PropertyModel(item.getModel(), "active");
    item.add(new Label("active", new AbstractReadOnlyModel(){
    public Object getObject() {
    if (Boolean.TRUE.equals(pm.getObject()) { return "enabled"; }
    else if (Boolean.FALSE.equals(pm.getObject()) { return "disabled"; }
    else { return null; }
    }
    }));

作为旁注,如果 enableddisabled 是要在页面中显示的文字,您可能有兴趣将它们本地化到 xml 资源文件中,并改用 getString()

关于java - CompoundPropertyModel - 在渲染之前转换一个 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7996973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com