【问题标题】:Reload bean property [duplicate]重新加载bean属性[重复]
【发布时间】:2018-03-05 12:09:15
【问题描述】:

假设,我有一个 JSF 页面,顶部有一个通用下拉菜单(标题)和一个用于向该菜单添加新值的表单。而且我在表单内有一个绝对正确的“ajax”标签属性“更新”(我的意思是,页面上的下拉菜单在提交表单后更新)。关键是用于添加值的下拉菜单和表单具有不同的视图类。

第一个:

@Named
@ViewScoped
public class DropdownMenuView {

    @Inject
    private ValuesService service;

    private List<String> values;

    @PostConstruct
    public void init() {
       value = service.getValues();
    }

    // Getters Setters...
}

第二个:

@Named
@ViewScoped
public class NewValuesView {

    @Inject
    private ValuesService service;

    public void addValue(String newValue) {
        service.addValue(newValue);
    }
}

好的,现在我通过表单添加新值,并打开下拉列表。但是列表并没有真正更新,因为 DropdownMenuView 上的“值”列表仍然相同。

我的问题是,如何在提交表单后更新“值”?有没有办法不将 DropdowneMenuView 注入 NewValuesView 并手动更新?

我现在看到的唯一方法是实现“事件类”之类的东西,在值更新后触发一个事件并在 getter 中检查这个类。

Eventholer 虚拟实现:

public class EventHolder {
    private static boolean event;

    public static void fire() {
        event = true;
    }

    public static boolean poll() {
         boolean res = event;
         event = false;
         return res;
    }
}

第 2 页:

public class NewValuesView {

    @Inject
    private ValuesService service;

    public void addValue(String newValue) {
        service.addValue(newValue);
        EventHolder.fire();
    }
}

第1页:

public class DropdownListView {

    ...

    public List<String> getValues() {
        if (EventHolder.poll()) {
            values = service.getValues();
        }
        return values;
    }
}

但我知道将逻辑放入 getter/setter 是一种不好的方法。
那么,有什么建议吗?
谢谢。

【问题讨论】:

    标签: jsf master-detail session-scope


    【解决方案1】:

    也许是因为@Inject注解的默认作用域是依赖伪作用域@Dependent

    CDI 具有所谓的依赖伪作用域。这是未显式声​​明范围类型的 bean 的默认范围。 [...] 依赖 bean 的实例永远不会在不同的客户端或不同的注入点之间共享。它严格来说是某个其他对象的依赖对象。它在它所属的对象被创建时被实例化,在它所属的对象被销毁时被销毁。

    因此,当您声明您的服务时 ValuesService 尝试使用正常范围 (http://docs.jboss.org/cdi/spec/1.0/html/contexts.html#dependentcontext)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 2012-05-07
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多