1

我有一个对话框和一个显示此对话框的 CommandLink。在此对话框中,我显示在命令链接的操作(或 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>

是否可以在更新完成之前执行操作?

4

2 回答 2

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();");
于 2013-10-25T14:20:23.157 回答
1

您可以从 ManagedBean 本身打开 Dialog。

RequestContext.getCurrentInstance().execute(myDialog.show());

RequestContext可用于从 ManagedBean 执行任何 javascript。
您还可以使用RequestContextUpdate 方法从 Managed Bean 更新组件。

 RequestContext.getCurrentInstance().update("COMPONENT_ID");
于 2013-10-26T08:20:07.083 回答