我正在使用带有GlassFish 3.0的JSF 2.0。
我有以下托管豆:
@ManagedBean
@RequestScoped
public class OverviewController{
private List<Event> eventList;
@PostConstruct
public void init(){
System.out.println("=> OverviewController - init() - enter");
System.out.println("=< OverviewController - init() - exit");
}
}
从 overview.xhtml 文件中,我从OverviewController中调用不同的属性或方法。
<ui:repeat var="event" value="#{overviewController.eventList}">
...
</ui:repeat>
一切正常,但问题出在日志文件上:
INFO: Enter : RESTORE_VIEW 1
INFO: Exit : RESTORE_VIEW 1
INFO: Enter : RENDER_RESPONSE 6
INFO: => OverviewController - init() - enter
INFO: => Overview Controller - updateSelectedTab() - enter
INFO: =< Overview Controller - updateSelectedTab() - exit
INFO: =< OverviewController - init() - exit
INFO: => OverviewController - init() - enter
INFO: => Overview Controller - updateSelectedTab() - enter
INFO: =< Overview Controller - updateSelectedTab() - exit
INFO: =< OverviewController - init() - exit
INFO: Exit : RENDER_RESPONSE 6
如您所见,init()方法在同一请求中被两次调用,无缘无故。据我所知,每个带有 PostConstruct 注释的方法都会被调用一次。我错了吗?
编辑: 页面上未使用AJAX。我用萤火虫检查了请求的数量。有树请求:
如果您有多个框架管理同一个bean类,则会发生这种情况。例如,JSF 和 CDI,或JSF 和 Spring,或CDI 和
Spring等。仔细检查您在Bean上的配置和注释。
如果您使用的是CDI,并且在@Named
整个类中使用了多个注释,那么也会发生这种情况。例如,@Named
直接在类上将其注册为托管Bean,在类上使用@Produces
getter方法注册另一个。您需要问自己是否
真的 必要。您也可以使用#{bean.someObject}
代替#{someObject}
。
@Named
@RequestScoped
public class Bean {
@PostConstruct
public void init() {
// ...
}
@Named
@Produces
public SomeObject getSomeObject() {
// ...
}
}
如果您的托管bean扩展了一些抽象类,而该抽象类又具有@PostConstruct
on方法,那么也会发生这种情况。您应该从中删除注释。另外,你应该让init方法抽象的,
不 具有@PostConstruct
对实现bean:
public abstract class BaseBean {
@PostConstruct
public void postConstruct() {
init();
}
public abstract void init();
}
我遇到了一个奇怪的问题。对于单个HTTP请求,我的servlet的doGet方法被多次调用。每隔10-12秒重新运行一次,直到初始过程完成。 下面是我的servlet代码 下面是web.xml中的映射 我使用的是SEAM和JSF,但这是一个独立的servlet。日志中也没有例外。我还验证了INIT方法只被调用一次。重复的是服务方法。所有重新运行的标识哈希代码都是相同的(System.Identit
问题内容: 我想我在这里描述的可能有个名字,但我不知道。所以我的第一个问题是要知道这种技术的名称。 这是一个示例:假设您正在网页上实现实时搜索。每次用户在搜索框中键入内容时,您都会触发一个新的搜索查询,并且结果会尽可能频繁地更新。这是一件愚蠢的事情,因为您发送的查询会超出实际需要。每2-3个字母发送一次请求,或者每100 ms最多发送一次请求就足够了。 因此,一种技术是安排在键入键之后立即执行的查
问题内容: SampleBean: 和配置文件是这样的: 而且我没有在bean标记上设置default-init-method属性。 任何机构都可以说出为什么@PostConstruct方法没有被调用的原因。 问题答案: 你需要(或)启用处理功能。
Spring 4.1和Spring Security 3.2:我们实现了一个自定义身份验证提供程序,如果用户输入了错误的密码,它会抛出一个Bad凭据异常。当抛出Bad凭据异常时,将调用ProviderManager.authenticate方法,该方法将再次调用自定义身份验证中的身份验证方法。当抛出LockedException时,不会再次调用自定义身份验证提供程序中的Authenate方法。我们
假设我们有两个类A、B和各自类的同步方法methodA、methodB。如果我们从synchronizedmethodA调用synchronized methodB,那么当methodB仍在执行时,线程是否仍对ObjectA保持锁定?
问题内容: 这些天,我正在学习JSF + Facelets。我有一个BackingBean和Facelet xHTML页面。当我请求facelet页时(仅一次),backing-bean-method被多次调用。 这可能是什么原因? 我看不到什么特别的东西。提前致谢。 这是方面: 这是支持豆。方法getKunden被多次调用: 问题答案: Bean的getter在那里就 可以 从视图侧 访问 模型