在调用getter后执行业务逻辑

时间:2013-03-22 11:09:11

标签: java jsf getter-setter

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

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

3 个答案:

答案 0 :(得分:2)

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

没有“The Getters”这样的阶段。 Getter只是读取bean属性的惯例。

可以在整个请求中单独读取这些属性。有些人可能会在“创建/恢复视图”期间查阅,而其他人可能会在“渲染回复”期间查阅。

在某个特定阶段,没有JSF能够扫描你的代码,并且它的乐趣就是调用它找到的每个getter。

你的解决方案就是让这个想法得以实现。我知道你可能很难放弃你认为是真实的东西,但是吸气,清醒你的心灵,告别你目前对事情如何运作的理解,并从头开始重新学习。

然后,您将立即找到自己的答案。祝好运!

答案 1 :(得分:2)

  

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

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

@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。

在bean的ajax listener方法中执行作业,该方法附加到输入组件的change事件。

@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输出。

答案 2 :(得分:-4)

完全不理解你的问题,但显而易见的方法是将逻辑放入getter和setter中。