我有一个Dialog和一个显示此对话框的CommandLink。在此对话框中,i显示在命令链接的操作(或propertyListener)期间创建的值。但由于更新是在操作之前执行的,因此未设置变量。
<p:commandLink update="@form:myDialog" action="#{myBean.setText('text')}"
oncomplete="myDialog.show()">
</p:commandLink>
....
<p:dialog widgetVar="myDialog" modal="true">
<p:inputText value="#{myBean.text}" />
</p:dialog>
是否可以在更新完成之前执行操作?
答案 0 :(得分:1)
我会在对话框中更新你没有指定对话框的Id属性
<p:commandLink update="myDialog" action="#{myBean.setText('text')}"
oncomplete="myDialog.show()">
</p:commandLink>
<p:dialog Id="myDialog" widgetVar="myDialog" modal="true">
<p:inputText value="#{myBean.text}" />
</p:dialog>
这会对你有帮助。
但我更喜欢的是使用输出面板
<p:commandLink update="myDialogPanel " actionlistner="#{myBean.setText('text')}"
oncomplete="myDialog.show()">
</p:commandLink>
<p:dialog Id="myDialog" widgetVar="myDialog" modal="true">
<p:outputPanel Id=myDialogPanel >
<p:inputText value="#{myBean.text}" />
</p:outputPanel>
</p:dialog>
或者您可以从managedBean更新对话框并显示对话框。如果在您的对话框未显示的managedBean方法中出现任何错误,这将非常有用。
RequestContext.getCurrentInstance().update("myDialogPanel");
RequestContext.getCurrentInstance().execute("myDialog.show();");
答案 1 :(得分:1)
您可以从ManagedBean本身打开Dialog。
RequestContext.getCurrentInstance().execute(myDialog.show());
RequestContext可用于执行ManagedBean中的任何javascript 您还可以使用RequestContext的Update从托管Bean更新组件 方法。
RequestContext.getCurrentInstance().update("COMPONENT_ID");