如果在浏览器中打开了Primefaces对话框,有没有办法告诉后备bean?
这就是我在facelet上显示一个对话框的方法:
<p:menuitem value="Click me" oncomplete="dialogWidget.show();" />
Run Code Online (Sandbox Code Playgroud)
当我从查找对话框对象ViewRoot
,都dialog.isVisible()
和dialog.isInView()
返回true,即使未所示的对话框.或者,是否有一个标志告诉我主窗口是否显示为灰色(这是在显示模式对话框时发生的)?
背景信息:我正在试图找出显示FacesMessages的位置.我的应用程序可以在两个位置显示消息:主窗口或对话框弹出窗口.打开模式对话框时,我希望消息仅显示在对话框中.如果没有显示对话框,我希望消息显示在主窗口中.
您可以将对话框的打开状态保持为bean中的布尔值.
为此,您可以附加一个actionListerer
属性<p:menuItem>
,将bean的布尔openStatus
属性设置为true.要切换该属性为false,基本处理结束时,你可以嵌套<p:ajax event="close" listener="#{dialogBean.dialogClosed}">
的内部<p:dialog>
用适当界定的听众.
豆子:
@ManagedBean
@ViewScoped
public class DialogBean implements Serializable {
private boolean openStatus = false;//getter + setter
public void dialogOpened(ActionEvent event) {
openStatus = true;
}
public void dialogClosed(CloseEvent event) {
openStatus = false;
}
}
Run Code Online (Sandbox Code Playgroud)
风景:
<h:form>
<p:menu>
<p:menuitem value="Open dialog" oncomplete="dialog.show();" update="dialogopen"/>
</p:menu>
<p:dialog widgetVar="dialog">
<h:outputText value="This is your dialog"/>
<p:ajax event="close" listener="#{dialogBean.dialogClosed}" update="dialogopen"/>
</p:dialog>
<h:outputText id="dialogopen" value="Is dialog open? #{dialogBean.openStatus}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
<p:remoteCommand>
就客户端事件而言,dialogWidgetVar.show()
并且dialogWidgetVar.hide()
是完全客户端事件,组件的状态不包括对话的"开放状态".正如你可以从primefaces文档中dialog.isVisible()
获得a的visible
属性<p:dialog>
,它指示在页面加载时打开对话框.至于dialog.isInView()
方法,它只是检查组件是否存在于视图中,并且也没有任何对您所关注的对话框状态的引用.
另请注意,将对话框绑定到类型的后备组件变量org.primefaces.component.dialog.Dialog
会引起臭名昭着的问题.
尽管如此,如果你不想连接额外的监听器menuitem
,你最好的选择是使用<p:remoteCommand>
,这将为你做更新.注意,应该存在关闭侦听器,以便将变量设置回false.
修改过的bean:
@ManagedBean
@ViewScoped
public class DialogBean implements Serializable {
private boolean openStatus = false;//getter + setter
public void dialogClosed(CloseEvent event) {
openStatus = false;
}
}
Run Code Online (Sandbox Code Playgroud)
修改后的观点
<h:form>
<p:menu>
<p:menuitem value="Open dialog" oncomplete="dialog.show(); updateOpenStatus();"/>
</p:menu>
<p:dialog widgetVar="dialog">
<h:outputText value="This is your dialog"/>
<p:ajax event="close" listener="#{dialogBean.dialogClosed}" update="dialogopen"/>
</p:dialog>
<p:remoteCommand name="updateOpenStatus" update="dialogopen">
<f:setPropertyActionListener value="#{true}" target="#{dialogBean.openStatus}"/>
</p:remoteCommand>
<h:outputText id="dialogopen" value="Is dialog open? #{dialogBean.openStatus}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4182 次 |
最近记录: |