0

我想在调用 getter 和 setter 之后编写我的业务逻辑(两次),因为我在业务逻辑中使用它们的对象值。然而 Construct,Post 构造,actionevents,.. 在 getter 之前被调用。

那么,如果我不想在 getter 中编写业务逻辑,我该如何使用它们的值呢?

4

3 回答 3

2

我想导航到该站点并从显示到 outputText 的数据库中获取数据。

在 bean 的(后)构造函数中完成工作。

@ManagedBean
@RequestScoped
public class Bean {

    private String data;

    @EJB
    private SomeService service;

    @PostConstruct
    public void init() {
        data = service.load();
    }

    // Getter.
}

<h:outputText value="#{bean.data}" />

当我更改(primefaces)selectOneMenu 值时,bean 获取 selectOneMenu 的值并在数据库中执行该值的查询,并将查询结果写入 outputText 中。

change在附加到输入组件事件的 bean 的 ajax 侦听器方法中完成这项工作。

@ManagedBean
@ViewScoped
public class Bean {

    private String selectedItem;
    private String result;

    @EJB
    private SomeService service;

    public void changeSelectedItem(AjaxBehaviorEvent event) {
        result = service.find(selectedItem);
    }

    // Getters+setter.
}

<p:selectOneMenu value="#{bean.selectedItem}">
    <f:selectItems ... />
    <p:ajax listener="#{bean.changeSelectedItem}" update="result" />
</p:selectOneMenu>
<h:outputText id="result" value="#{bean.result}" />

在调用 getter之后执行此操作为时已晚。那时 JSF 已经完成了 HTML 输出的呈现。之后您无法更改 HTML 输出。

于 2013-03-25T09:49:11.967 回答
2

你在思考中犯了一个基本错误。

没有像“吸气剂”这样的阶段。Getter 只是读取 bean 属性的约定。

这些属性可以在整个请求中单独读取。有些可能早在“创建/恢复视图”期间就被咨询,而另一些可能在“呈现响应”期间咨询。

没有这样的事情,JSF 在某个特定阶段会扫描您的代码,并且为了好玩,它会调用它找到的每个 getter。

你的解决方案是放开这种想法。我知道放弃你认为是真的事情可能很难,但是吸气,让你头脑清醒,告别你目前对事情如何运作的理解,从头开始重新学习。

然后,您很快就会自己找到答案。祝你好运!

于 2013-03-22T15:07:15.587 回答
-4

没有完全理解你的问题,但明显的方法是将逻辑放在 getter 和 setter 中。

于 2013-03-22T11:56:46.387 回答