我想在调用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中放入逻辑