调用getter后执行业务逻辑



我想在调用getter和setter(两次)之后编写我的业务逻辑,因为我在业务逻辑中使用了它们的对象值。然而构念、后构念、动作事件……在getter之前调用。

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

我想导航到该站点并从显示到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侦听器方法中完成该工作,该方法附加到输入组件的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输出

你的想法犯了一个基本的错误。

没有"The getter"这个阶段。getter只是读取bean属性的一种约定。

这些属性可以在整个请求过程中单独读取。有些可以在"创建/恢复视图"过程中查询,而另一些可以在"呈现响应"过程中查询。

不存在这样的情况,即JSF在某个特定阶段扫描您的代码,并为了好玩而调用它找到的每个getter。

你的解决办法就是让这种想法过去。我知道你可能很难放弃你认为是对的事情,但是吸气,清空你的大脑,对你目前对事情如何运作的理解说再见,然后从头开始学习。

你很快就会找到答案。好运!

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

相关内容

  • 没有找到相关文章

最新更新