我想在调用getter和setter之后编写我的业务逻辑(两次), 因为我在业务逻辑中使用它们的对象值。 然而,在getter之前调用Construct,Post构造,actionevents,..
那么如果我不想在其中编写业务逻辑,我如何使用getter的值呢?
答案 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中。