我有一个弹出我的XHTML
它获得展示有条件地取决于用户在默认情况下呈现在主屏幕何种选择中定义:查看范围内管理收盘P上之后bean的@PostConstruct重新调用:对话框
<p:dialog id="commentDialogID" header="Enter comment" widgetVar="commentDialog" modal="true" resizable="true" height="auto">
<h:form id="commentForm">
<h:outputLabel for="comment" value="Comment:"/>
<p:inputTextarea id="comment" title="Comment"
rows="6" cols="33"
value="#{managedBean.activeItem.comment}"
required="true">
<f:ajax render="comment"/>
</p:inputTextarea>
<h:commandButton id="commentSubmit" value="Submit" action="#{managedBean.proceed}" onclick="PF('commentDialog').hide();">
<f:ajax render="commentSubmit"/>
</h:commandButton>
</h:form>
</p:dialog>
的问题在于,一旦关闭了对话框/弹出窗口,容器(JBoss
)或框架(JSF/Primefaces
),不知道哪个,认为整个视图已关闭,因此在触发此弹出窗口的下一个请求时,它重新调用支持bean的方法@PostConstruct
。支持豆是@ViewScoped
。我真的不希望它做到这一点,相反,我希望它把对话框/弹出窗口当作div的关闭不影响视图状态的页面。
第一次调出对话框时,@PostConstruct不会作为初始视图调用,因为呈现页面的初始视图(称为@PostConstruct)仍处于活动状态。然而,第二次出现时,它被重新调用了,这让我相信这是因为它在第一次之后被关闭了,无论是框架的容器还是错误都需要重新加载bean。
在关闭此对话框后,我可以做些什么来阻止backing bean进入@PostConstruct?
我不知道它是否会解决问题,但是您应该在PrimeFaces组件中使用'p:ajax'而不是'f:ajax',就像在您的'p:inputTextarea'中一样...... –
有趣,解决这个问题 !! – amphibient
请使用新代码和一些关于更改内容的文本创建答案 – Kukeltje