我想在调用 getter 和 setter 之后编写我的业务逻辑(两次),因为我在业务逻辑中使用它们的对象值。然而 Construct,Post 构造,actionevents,.. 在 getter 之前被调用。
那么,如果我不想在 getter 中编写业务逻辑,我该如何使用它们的值呢?
我想在调用 getter 和 setter 之后编写我的业务逻辑(两次),因为我在业务逻辑中使用它们的对象值。然而 Construct,Post 构造,actionevents,.. 在 getter 之前被调用。
那么,如果我不想在 getter 中编写业务逻辑,我该如何使用它们的值呢?
我想导航到该站点并从显示到 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 输出。
你在思考中犯了一个基本错误。
没有像“吸气剂”这样的阶段。Getter 只是读取 bean 属性的约定。
这些属性可以在整个请求中单独读取。有些可能早在“创建/恢复视图”期间就被咨询,而另一些可能在“呈现响应”期间咨询。
没有这样的事情,JSF 在某个特定阶段会扫描您的代码,并且为了好玩,它会调用它找到的每个 getter。
你的解决方案是放开这种想法。我知道放弃你认为是真的事情可能很难,但是吸气,让你头脑清醒,告别你目前对事情如何运作的理解,从头开始重新学习。
然后,您很快就会自己找到答案。祝你好运!
没有完全理解你的问题,但明显的方法是将逻辑放在 getter 和 setter 中。